diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-07-15 21:21:05 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-08-24 00:18:58 +0200 |
commit | 92b37676328a960bc092b1f3834233c550376457 (patch) | |
tree | ac75c61314238e7a6b24751f20d47a222ed97f08 /src/corelib/kernel/qmetatype.cpp | |
parent | d0ccb3aaf9052fc20cee08c825d8ccc9ac02fe8e (diff) |
Remove refcounting of QMetaTypeInterface
It's only used for dynamic types in DBUS and QML, where we control
things good enough to be able to handle the lifetime of those
interfaces there.
Change-Id: Ia7f8970d17a85b195db85fcdc2d8f1febd8753f4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qmetatype.cpp')
-rw-r--r-- | src/corelib/kernel/qmetatype.cpp | 31 |
1 files changed, 8 insertions, 23 deletions
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 76c9a2fa9c..6a8f47f102 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -779,13 +779,16 @@ bool QMetaType::isOrdered() const return d_ptr && (d_ptr->flags & QMetaType::IsPointer || d_ptr->lessThan != nullptr); } -void QtMetaTypePrivate::derefAndDestroy(NS(QtPrivate::QMetaTypeInterface) *d_ptr) + +/*! + \internal +*/ +void QMetaType::unregisterMetaType(QMetaType type) { - if (d_ptr && !d_ptr->ref.deref()) { + if (type.d_ptr && type.d_ptr->typeId.loadRelaxed() >= QMetaType::User) { if (auto reg = customTypeRegistry()) - reg->unregisterDynamicType(d_ptr->typeId.loadRelaxed()); - Q_ASSERT(d_ptr->deleteSelf); - d_ptr->deleteSelf(d_ptr); + reg->unregisterDynamicType(type.d_ptr->typeId.loadRelaxed()); + type.d_ptr->typeId.storeRelease(0); } } @@ -794,25 +797,7 @@ void QtMetaTypePrivate::derefAndDestroy(NS(QtPrivate::QMetaTypeInterface) *d_ptr Destructs this object. */ -QMetaType::~QMetaType() -{ - QtMetaTypePrivate::derefAndDestroy(d_ptr); -} - -QMetaType::QMetaType(QtPrivate::QMetaTypeInterface *d) : d_ptr(d) -{ - if (d_ptr) - d_ptr->ref.ref(); -} -QMetaType &QMetaType::operator=(const QMetaType &other) -{ - if (d_ptr != other.d_ptr) { - this->~QMetaType(); - new (this) QMetaType(other.d_ptr); - } - return *this; -} /*! \fn template<typename T> QMetaType QMetaType::fromType() |