diff options
author | Thiago Macieira <thiago.macieira@nokia.com> | 2010-07-15 13:08:38 (GMT) |
---|---|---|
committer | Thiago Macieira <thiago.macieira@nokia.com> | 2010-07-15 13:08:38 (GMT) |
commit | 8cda4ebd5611a6680cd311ff7cadfcc43c6f1686 (patch) | |
tree | 9f1813234d33b577951e21eee7d81f65c1f20769 /src/corelib/tools | |
parent | 03c01176ebf423085e56ceabcf8335ca5027a786 (diff) | |
parent | 77edce14629b665924e89b1f22f902ceb010c964 (diff) | |
download | Qt-8cda4ebd5611a6680cd311ff7cadfcc43c6f1686.zip Qt-8cda4ebd5611a6680cd311ff7cadfcc43c6f1686.tar.gz Qt-8cda4ebd5611a6680cd311ff7cadfcc43c6f1686.tar.bz2 |
Merge remote branch 'origin/4.6' into qt-4.7-from-4.6
Conflicts:
bin/syncqt
src/3rdparty/webkit/VERSION
src/3rdparty/webkit/WebCore/ChangeLog
src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.h
src/3rdparty/webkit/WebCore/page/FrameView.cpp
src/3rdparty/webkit/WebCore/page/FrameView.h
src/3rdparty/webkit/WebCore/platform/ScrollView.cpp
src/3rdparty/webkit/WebCore/platform/ScrollView.h
src/corelib/plugin/quuid.cpp
src/gui/dialogs/qfontdialog.cpp
src/multimedia/audio/qaudiodevicefactory.cpp
src/opengl/qgl.cpp
src/openvg/qpaintengine_vg.cpp
tests/auto/qxmlquery/tst_qxmlquery.cpp
Diffstat (limited to 'src/corelib/tools')
-rw-r--r-- | src/corelib/tools/qsharedpointer_impl.h | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index 550ff58..4cce339 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -324,12 +324,17 @@ namespace QtSharedPointer { typedef ExternalRefCountData Data; inline void ref() const { d->weakref.ref(); d->strongref.ref(); } - inline bool deref() + inline void deref() + { deref(d, this->value); } + static inline void deref(Data *d, T *value) { + if (!d) return; if (!d->strongref.deref()) { - internalDestroy(); + if (!d->destroy()) + delete value; } - return d->weakref.deref(); + if (!d->weakref.deref()) + delete d; } inline void internalConstruct(T *ptr) @@ -378,7 +383,7 @@ namespace QtSharedPointer { template <class X> inline ExternalRefCount(const ExternalRefCount<X> &other) : Basic<T>(other.value), d(other.d) { if (d) ref(); } - inline ~ExternalRefCount() { if (d && !deref()) delete d; } + inline ~ExternalRefCount() { deref(); } template <class X> inline void internalCopy(const ExternalRefCount<X> &other) @@ -386,12 +391,6 @@ namespace QtSharedPointer { internalSet(other.d, other.data()); } - inline void internalDestroy() - { - if (!d->destroy()) - delete this->value; - } - inline void internalSwap(ExternalRefCount &other) { qSwap(d, other.d); @@ -424,10 +423,14 @@ namespace QtSharedPointer { else o = 0; } - if (d && !deref()) - delete d; - d = o; - this->value = d && d->strongref ? actual : 0; + + qSwap(d, o); + qSwap(this->value, actual); + if (!d || d->strongref == 0) + this->value = 0; + + // dereference saved data + deref(o, actual); } Data *d; |