From 12d9436522c13f5317617670e20991ef647f211a Mon Sep 17 00:00:00 2001 From: Jedrzej Nowacki Date: Fri, 10 Jun 2011 09:06:32 +0200 Subject: 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 Reviewed-by: Olivier Goffart --- src/corelib/concurrent/qtconcurrentexception.cpp | 22 +++++----------------- 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 +#include #ifndef QT_NO_EXCEPTIONS # include @@ -87,7 +88,7 @@ public: void operator=(const ExceptionHolder &other); ~ExceptionHolder(); Exception *exception() const; - Base *base; + QExplicitlySharedDataPointer base; }; class Q_CORE_EXPORT ExceptionStore -- cgit v1.2.3