summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJedrzej Nowacki <jedrzej.nowacki@nokia.com>2011-06-10 09:06:32 +0200
committerQt by Nokia <qt-info@nokia.com>2011-07-11 18:58:41 +0200
commit12d9436522c13f5317617670e20991ef647f211a (patch)
tree231ca7f21b15be373352d971dd68ed98b7067176 /src
parentd1f080138a0bfaf845d051867c919bcb0e95c739 (diff)
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>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/concurrent/qtconcurrentexception.cpp22
-rw-r--r--src/corelib/concurrent/qtconcurrentexception.h3
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