From d42b901ae4f0aa618ca66009ea79d72720b37380 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Fri, 22 Sep 2023 11:56:44 +0200 Subject: [PATCH] QSharedPointer: Remove support code for tracking weak-pointer In Qt 6, it is no longer possible to create a weak pointer from a plain QObject pointer. Consequently, we don't need the work-aronuds introduced for QTBUG-22622. Except that we still need to keep the functions as they are exported. Mark them as QT6_ONLY, so that they'll be gone automatically come Qt 6. Amends e40320c552a9ccd4c1879a4da13c8d909b2cd21e. Change-Id: I568da04008374c891a111eee49f6679dabdfdee4 Reviewed-by: Qt CI Bot Reviewed-by: Thiago Macieira --- src/corelib/tools/qsharedpointer.cpp | 4 ++++ src/corelib/tools/qsharedpointer_impl.h | 11 +++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp index 4b275ac1ba..99e0d5ae24 100644 --- a/src/corelib/tools/qsharedpointer.cpp +++ b/src/corelib/tools/qsharedpointer.cpp @@ -1422,6 +1422,7 @@ QT_BEGIN_NAMESPACE +QT6_ONLY( /*! \internal This function is called for a just-created QObject \a obj, to enable @@ -1429,7 +1430,9 @@ QT_BEGIN_NAMESPACE */ void QtSharedPointer::ExternalRefCountData::setQObjectShared(const QObject *, bool) {} +) +QT6_ONLY( /*! \internal This function is called when a QSharedPointer is created from a QWeakPointer @@ -1442,6 +1445,7 @@ void QtSharedPointer::ExternalRefCountData::checkQObjectShared(const QObject *) if (strongref.loadRelaxed() < 0) qWarning("QSharedPointer: cannot create a QSharedPointer from a QObject-tracking QWeakPointer"); } +) QtSharedPointer::ExternalRefCountData *QtSharedPointer::ExternalRefCountData::getAndRef(const QObject *obj) { diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index 73e39f0b91..456be91d03 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -116,8 +116,10 @@ namespace QtSharedPointer { #ifndef QT_NO_QOBJECT Q_CORE_EXPORT static ExternalRefCountData *getAndRef(const QObject *); + QT6_ONLY( Q_CORE_EXPORT void setQObjectShared(const QObject *, bool enable); - Q_CORE_EXPORT void checkQObjectShared(const QObject *); + ) + QT6_ONLY(Q_CORE_EXPORT void checkQObjectShared(const QObject *);) #endif inline void checkQObjectShared(...) { } inline void setQObjectShared(...) { } @@ -499,7 +501,6 @@ private: #ifdef QT_SHAREDPOINTER_TRACK_POINTERS internalSafetyCheckAdd(d, ptr); #endif - d->setQObjectShared(ptr, true); enableSharedFromThis(ptr); } @@ -527,12 +528,10 @@ private: tmp = o->strongref.loadRelaxed(); // failed, try again } - if (tmp > 0) { + if (tmp > 0) o->weakref.ref(); - } else { - o->checkQObjectShared(actual); + else o = nullptr; - } } qt_ptr_swap(d, o);