Deprecate QMutex in recursive mode

Use QRecursiveMutex instead.

Pick-to: 5.15
Change-Id: I862fc2b3143deeb5c96dc8d445be5f9fa2535670
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Lars Knoll 2020-09-04 10:40:29 +02:00
parent 10bc093d4f
commit 0e681064b5
3 changed files with 12 additions and 5 deletions

View File

@ -152,6 +152,7 @@ public:
/*!
\enum QMutex::RecursionMode
\obsolete Use QRecursiveMutex to create a recursive mutex.
\value Recursive In this mode, a thread can lock the same mutex
multiple times and the mutex won't be unlocked
@ -173,6 +174,7 @@ public:
/*!
Constructs a new mutex. The mutex is created in an unlocked state.
\obsolete Use QRecursiveMutex to create a recursive mutex.
If \a mode is QMutex::Recursive, a thread can lock the same mutex
multiple times and the mutex won't be unlocked until a
@ -197,7 +199,7 @@ QMutex::QMutex(RecursionMode mode)
QMutex::~QMutex()
{
QMutexData *d = d_ptr.loadRelaxed();
if (isRecursive()) {
if (QBasicMutex::isRecursive()) {
delete static_cast<QRecursiveMutexPrivate *>(d);
} else if (d) {
#ifndef QT_LINUX_FUTEX

View File

@ -132,8 +132,16 @@ public:
#else
QMutex() { d_ptr.storeRelaxed(nullptr); }
#endif
#if QT_DEPRECATED_SINCE(5,15)
enum RecursionMode { NonRecursive, Recursive };
QT_DEPRECATED_VERSION_X(5, 15, "Use QRecursiveMutex instead of a recursive QMutex")
explicit QMutex(RecursionMode mode);
QT_DEPRECATED_VERSION_X(5, 15, "Use QRecursiveMutex instead of a recursive QMutex")
bool isRecursive() const noexcept
{ return QBasicMutex::isRecursive(); }
#endif
~QMutex();
// BasicLockable concept
@ -164,9 +172,6 @@ public:
}
#endif
bool isRecursive() const noexcept
{ return QBasicMutex::isRecursive(); }
private:
Q_DISABLE_COPY(QMutex)
friend class QMutexLocker;

View File

@ -213,7 +213,7 @@ bool QWaitCondition::wait(QMutex *mutex, QDeadlineTimer deadline)
{
if (! mutex)
return false;
if (mutex->isRecursive()) {
if (static_cast<QBasicMutex *>(mutex)->isRecursive()) {
qWarning("QWaitCondition: cannot wait on recursive mutexes");
return false;
}