diff options
author | Jedrzej Nowacki <jedrzej.nowacki@nokia.com> | 2011-06-10 09:06:32 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-07-11 18:58:41 +0200 |
commit | 12d9436522c13f5317617670e20991ef647f211a (patch) | |
tree | 231ca7f21b15be373352d971dd68ed98b7067176 | |
parent | d1f080138a0bfaf845d051867c919bcb0e95c739 (diff) | |
download | qtbase-12d9436522c13f5317617670e20991ef647f211a.tar.gz |
Cleanup reference counting in internal::Base class (qtconcurrent)
It is better to use QSharedData and QExplicitlySharedDataPointer then
doing manual ref counting.
Change-Id: I5674046141701bd48a53415ab96fcb6b538e79e6
Reviewed-on: http://codereview.qt.nokia.com/1440
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>
-rw-r--r-- | src/corelib/concurrent/qtconcurrentexception.cpp | 22 | ||||
-rw-r--r-- | src/corelib/concurrent/qtconcurrentexception.h | 3 |
2 files changed, 7 insertions, 18 deletions
diff --git a/src/corelib/concurrent/qtconcurrentexception.cpp b/src/corelib/concurrent/qtconcurrentexception.cpp index 933ad3c264..237152c0d3 100644 --- a/src/corelib/concurrent/qtconcurrentexception.cpp +++ b/src/corelib/concurrent/qtconcurrentexception.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qtconcurrentexception.h" +#include "QtCore/qshareddata.h" #ifndef QT_NO_QFUTURE #ifndef QT_NO_EXCEPTIONS @@ -141,15 +142,14 @@ Exception *UnhandledException::clone() const namespace internal { -class Base +class Base : public QSharedData { public: Base(Exception *exception) - : exception(exception), refCount(1), hasThrown(false) { } + : exception(exception), hasThrown(false) { } ~Base() { delete exception; } Exception *exception; - QAtomicInt refCount; bool hasThrown; }; @@ -158,27 +158,15 @@ ExceptionHolder::ExceptionHolder(Exception *exception) ExceptionHolder::ExceptionHolder(const ExceptionHolder &other) : base(other.base) -{ - base->refCount.ref(); -} +{} void ExceptionHolder::operator=(const ExceptionHolder &other) { - if (base == other.base) - return; - - if (base->refCount.deref() == false) - delete base; - base = other.base; - base->refCount.ref(); } ExceptionHolder::~ExceptionHolder() -{ - if (base->refCount.deref() == 0) - delete base; -} +{} Exception *ExceptionHolder::exception() const { diff --git a/src/corelib/concurrent/qtconcurrentexception.h b/src/corelib/concurrent/qtconcurrentexception.h index b58b3ba23a..1c100a5206 100644 --- a/src/corelib/concurrent/qtconcurrentexception.h +++ b/src/corelib/concurrent/qtconcurrentexception.h @@ -47,6 +47,7 @@ #ifndef QT_NO_QFUTURE #include <QtCore/qatomic.h> +#include <QtCore/qshareddata.h> #ifndef QT_NO_EXCEPTIONS # include <exception> @@ -87,7 +88,7 @@ public: void operator=(const ExceptionHolder &other); ~ExceptionHolder(); Exception *exception() const; - Base *base; + QExplicitlySharedDataPointer<Base> base; }; class Q_CORE_EXPORT ExceptionStore |