Browse Source

chore: Replace deprecated QMutex::Recursive with QRecursiveMutex

reviewable/pr6422/r4
Anthony Bilinski 4 years ago
parent
commit
992cdbd045
No known key found for this signature in database
GPG Key ID: 2AA8E0DA1B31FB3C
  1. 1
      src/audio/backend/alsink.cpp
  2. 3
      src/audio/backend/alsink.h
  3. 1
      src/audio/backend/alsource.cpp
  4. 3
      src/audio/backend/alsource.h
  5. 3
      src/audio/backend/openal.h
  6. 1
      src/core/core.cpp
  7. 3
      src/core/core.h
  8. 5
      src/core/coreav.cpp
  9. 8
      src/core/coreav.h
  10. 5
      src/core/corefile.cpp
  11. 8
      src/core/corefile.h
  12. 3
      src/persistence/offlinemsgengine.cpp
  13. 5
      src/persistence/offlinemsgengine.h
  14. 4
      src/persistence/settings.cpp
  15. 4
      src/persistence/settings.h
  16. 36
      src/util/compatiblerecursivemutex.h
  17. 36
      util/include/util/compatiblerecursivemutex.h

1
src/audio/backend/alsink.cpp

@ -101,7 +101,6 @@ void AlSink::kill()
AlSink::AlSink(OpenAL& al, uint sourceId) AlSink::AlSink(OpenAL& al, uint sourceId)
: audio(al) : audio(al)
, sourceId{sourceId} , sourceId{sourceId}
, killLock(QMutex::Recursive)
{} {}
AlSink::operator bool() const AlSink::operator bool() const

3
src/audio/backend/alsink.h

@ -25,6 +25,7 @@
#include "src/model/interface.h" #include "src/model/interface.h"
#include "src/audio/iaudiosink.h" #include "src/audio/iaudiosink.h"
#include "src/util/compatiblerecursivemutex.h"
class OpenAL; class OpenAL;
class QMutex; class QMutex;
@ -56,7 +57,7 @@ private:
OpenAL& audio; OpenAL& audio;
uint sourceId; uint sourceId;
bool killed = false; bool killed = false;
mutable QMutex killLock; mutable CompatibleRecursiveMutex killLock;
}; };
#endif // ALSINK_H #endif // ALSINK_H

1
src/audio/backend/alsource.cpp

@ -30,7 +30,6 @@
*/ */
AlSource::AlSource(OpenAL& al) AlSource::AlSource(OpenAL& al)
: audio(al) : audio(al)
, killLock(QMutex::Recursive)
{} {}
AlSource::~AlSource() AlSource::~AlSource()

3
src/audio/backend/alsource.h

@ -21,6 +21,7 @@
#define ALSOURCE_H #define ALSOURCE_H
#include "src/audio/iaudiosource.h" #include "src/audio/iaudiosource.h"
#include "src/util/compatiblerecursivemutex.h"
#include <QMutex> #include <QMutex>
#include <QObject> #include <QObject>
@ -43,7 +44,7 @@ public:
private: private:
OpenAL& audio; OpenAL& audio;
bool killed = false; bool killed = false;
mutable QMutex killLock; mutable CompatibleRecursiveMutex killLock;
}; };
#endif // ALSOURCE_H #endif // ALSOURCE_H

3
src/audio/backend/openal.h

@ -24,6 +24,7 @@
#include "src/audio/iaudiocontrol.h" #include "src/audio/iaudiocontrol.h"
#include "src/audio/backend/alsink.h" #include "src/audio/backend/alsink.h"
#include "src/audio/backend/alsource.h" #include "src/audio/backend/alsource.h"
#include "src/util/compatiblerecursivemutex.h"
#include <memory> #include <memory>
#include <unordered_set> #include <unordered_set>
@ -133,7 +134,7 @@ private:
protected: protected:
QThread* audioThread; QThread* audioThread;
mutable QMutex audioLock{QMutex::Recursive}; mutable CompatibleRecursiveMutex audioLock;
QString inDev{}; QString inDev{};
QString outDev{}; QString outDev{};

1
src/core/core.cpp

@ -32,6 +32,7 @@
#include "src/nexus.h" #include "src/nexus.h"
#include "src/persistence/profile.h" #include "src/persistence/profile.h"
#include "src/util/strongtype.h" #include "src/util/strongtype.h"
#include "src/util/compatiblerecursivemutex.h"
#include <QCoreApplication> #include <QCoreApplication>
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))

3
src/core/core.h

@ -32,6 +32,7 @@
#include "toxpk.h" #include "toxpk.h"
#include "src/util/strongtype.h" #include "src/util/strongtype.h"
#include "src/util/compatiblerecursivemutex.h"
#include "src/model/status.h" #include "src/model/status.h"
#include <tox/tox.h> #include <tox/tox.h>
@ -251,7 +252,7 @@ private:
std::unique_ptr<CoreAV> av; std::unique_ptr<CoreAV> av;
QTimer* toxTimer = nullptr; QTimer* toxTimer = nullptr;
// recursive, since we might call our own functions // recursive, since we might call our own functions
mutable QMutex coreLoopLock{QMutex::Recursive}; mutable CompatibleRecursiveMutex coreLoopLock;
std::unique_ptr<QThread> coreThread = nullptr; std::unique_ptr<QThread> coreThread = nullptr;
}; };

5
src/core/coreav.cpp

@ -25,6 +25,7 @@
#include "src/persistence/settings.h" #include "src/persistence/settings.h"
#include "src/video/corevideosource.h" #include "src/video/corevideosource.h"
#include "src/video/videoframe.h" #include "src/video/videoframe.h"
#include "src/util/compatiblerecursivemutex.h"
#include <QCoreApplication> #include <QCoreApplication>
#include <QDebug> #include <QDebug>
#include <QThread> #include <QThread>
@ -68,7 +69,7 @@
* deadlock. * deadlock.
*/ */
CoreAV::CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> toxav, QMutex& toxCoreLock) CoreAV::CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> toxav, CompatibleRecursiveMutex& toxCoreLock)
: audio{nullptr} : audio{nullptr}
, toxav{std::move(toxav)} , toxav{std::move(toxav)}
, coreavThread{new QThread{this}} , coreavThread{new QThread{this}}
@ -105,7 +106,7 @@ void CoreAV::connectCallbacks(ToxAV& toxav)
* @param core pointer to the Tox instance * @param core pointer to the Tox instance
* @return CoreAV instance on success, {} on failure * @return CoreAV instance on success, {} on failure
*/ */
CoreAV::CoreAVPtr CoreAV::makeCoreAV(Tox* core, QMutex &toxCoreLock) CoreAV::CoreAVPtr CoreAV::makeCoreAV(Tox* core, CompatibleRecursiveMutex &toxCoreLock)
{ {
TOXAV_ERR_NEW err; TOXAV_ERR_NEW err;
std::unique_ptr<ToxAV, ToxAVDeleter> toxav{toxav_new(core, &err)}; std::unique_ptr<ToxAV, ToxAVDeleter> toxav{toxav_new(core, &err)};

8
src/core/coreav.h

@ -22,6 +22,8 @@
#define COREAV_H #define COREAV_H
#include "src/core/toxcall.h" #include "src/core/toxcall.h"
#include "src/util/compatiblerecursivemutex.h"
#include <QObject> #include <QObject>
#include <QMutex> #include <QMutex>
#include <QReadWriteLock> #include <QReadWriteLock>
@ -47,7 +49,7 @@ class CoreAV : public QObject
public: public:
using CoreAVPtr = std::unique_ptr<CoreAV>; using CoreAVPtr = std::unique_ptr<CoreAV>;
static CoreAVPtr makeCoreAV(Tox* core, QMutex& coreLock); static CoreAVPtr makeCoreAV(Tox* core, CompatibleRecursiveMutex& coreLock);
void setAudio(IAudioControl& newAudio); void setAudio(IAudioControl& newAudio);
IAudioControl* getAudio(); IAudioControl* getAudio();
@ -113,7 +115,7 @@ private:
} }
}; };
CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> tox, QMutex &toxCoreLock); CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> tox, CompatibleRecursiveMutex &toxCoreLock);
void connectCallbacks(ToxAV& toxav); void connectCallbacks(ToxAV& toxav);
void process(); void process();
@ -156,7 +158,7 @@ private:
* must not execute at the same time as tox_iterate() * must not execute at the same time as tox_iterate()
* @note This must be a recursive mutex as we're going to lock it in callbacks * @note This must be a recursive mutex as we're going to lock it in callbacks
*/ */
QMutex& coreLock; CompatibleRecursiveMutex& coreLock;
}; };
#endif // COREAV_H #endif // COREAV_H

5
src/core/corefile.cpp

@ -25,6 +25,7 @@
#include "src/persistence/settings.h" #include "src/persistence/settings.h"
#include "src/model/status.h" #include "src/model/status.h"
#include "src/model/toxclientstandards.h" #include "src/model/toxclientstandards.h"
#include "src/util/compatiblerecursivemutex.h"
#include <QDebug> #include <QDebug>
#include <QDir> #include <QDir>
#include <QFile> #include <QFile>
@ -38,7 +39,7 @@
* @brief Manages the file transfer service of toxcore * @brief Manages the file transfer service of toxcore
*/ */
CoreFilePtr CoreFile::makeCoreFile(Core *core, Tox *tox, QMutex &coreLoopLock) CoreFilePtr CoreFile::makeCoreFile(Core *core, Tox *tox, CompatibleRecursiveMutex &coreLoopLock)
{ {
assert(core != nullptr); assert(core != nullptr);
assert(tox != nullptr); assert(tox != nullptr);
@ -49,7 +50,7 @@ CoreFilePtr CoreFile::makeCoreFile(Core *core, Tox *tox, QMutex &coreLoopLock)
return result; return result;
} }
CoreFile::CoreFile(Tox *core, QMutex &coreLoopLock) CoreFile::CoreFile(Tox *core, CompatibleRecursiveMutex &coreLoopLock)
: tox{core} : tox{core}
, coreLoopLock{&coreLoopLock} , coreLoopLock{&coreLoopLock}
{ {

8
src/core/corefile.h

@ -28,6 +28,8 @@
#include "src/core/toxpk.h" #include "src/core/toxpk.h"
#include "src/model/status.h" #include "src/model/status.h"
#include "src/util/compatiblerecursivemutex.h"
#include <QHash> #include <QHash>
#include <QMutex> #include <QMutex>
#include <QObject> #include <QObject>
@ -48,7 +50,7 @@ class CoreFile : public QObject
public: public:
void handleAvatarOffer(uint32_t friendId, uint32_t fileId, bool accept); void handleAvatarOffer(uint32_t friendId, uint32_t fileId, bool accept);
static CoreFilePtr makeCoreFile(Core* core, Tox* tox, QMutex& coreLoopLock); static CoreFilePtr makeCoreFile(Core* core, Tox* tox, CompatibleRecursiveMutex& coreLoopLock);
void sendFile(uint32_t friendId, QString filename, QString filePath, void sendFile(uint32_t friendId, QString filename, QString filePath,
long long filesize); long long filesize);
@ -78,7 +80,7 @@ signals:
void fileSendFailed(uint32_t friendId, const QString& fname); void fileSendFailed(uint32_t friendId, const QString& fname);
private: private:
CoreFile(Tox* core, QMutex& coreLoopLock); CoreFile(Tox* core, CompatibleRecursiveMutex& coreLoopLock);
ToxFile* findFile(uint32_t friendId, uint32_t fileId); ToxFile* findFile(uint32_t friendId, uint32_t fileId);
void addFile(uint32_t friendId, uint32_t fileId, const ToxFile& file); void addFile(uint32_t friendId, uint32_t fileId, const ToxFile& file);
@ -107,7 +109,7 @@ private slots:
private: private:
QHash<uint64_t, ToxFile> fileMap; QHash<uint64_t, ToxFile> fileMap;
Tox* tox; Tox* tox;
QMutex* coreLoopLock = nullptr; CompatibleRecursiveMutex* coreLoopLock = nullptr;
}; };
#endif // COREFILE_H #endif // COREFILE_H

3
src/persistence/offlinemsgengine.cpp

@ -30,8 +30,7 @@
#include <chrono> #include <chrono>
OfflineMsgEngine::OfflineMsgEngine(Friend* frnd, ICoreFriendMessageSender* messageSender) OfflineMsgEngine::OfflineMsgEngine(Friend* frnd, ICoreFriendMessageSender* messageSender)
: mutex(QMutex::Recursive) : f(frnd)
, f(frnd)
, messageSender(messageSender) , messageSender(messageSender)
{} {}

5
src/persistence/offlinemsgengine.h

@ -24,6 +24,9 @@
#include "src/core/core.h" #include "src/core/core.h"
#include "src/model/message.h" #include "src/model/message.h"
#include "src/persistence/db/rawdatabase.h" #include "src/persistence/db/rawdatabase.h"
#include "src/util/compatiblerecursivemutex.h"
#include <QDateTime> #include <QDateTime>
#include <QMap> #include <QMap>
#include <QMutex> #include <QMutex>
@ -63,7 +66,7 @@ private slots:
private: private:
void checkForCompleteMessages(ReceiptNum receipt); void checkForCompleteMessages(ReceiptNum receipt);
QMutex mutex; CompatibleRecursiveMutex mutex;
const Friend* f; const Friend* f;
ICoreFriendMessageSender* messageSender; ICoreFriendMessageSender* messageSender;
QVector<ReceiptNum> receivedReceipts; QVector<ReceiptNum> receivedReceipts;

4
src/persistence/settings.cpp

@ -33,6 +33,8 @@
#endif #endif
#include "src/ipc.h" #include "src/ipc.h"
#include "src/util/compatiblerecursivemutex.h"
#include <QApplication> #include <QApplication>
#include <QCryptographicHash> #include <QCryptographicHash>
#include <QDebug> #include <QDebug>
@ -57,7 +59,7 @@
const QString Settings::globalSettingsFile = "qtox.ini"; const QString Settings::globalSettingsFile = "qtox.ini";
Settings* Settings::settings{nullptr}; Settings* Settings::settings{nullptr};
QMutex Settings::bigLock{QMutex::Recursive}; CompatibleRecursiveMutex Settings::bigLock;
QThread* Settings::settingsThread{nullptr}; QThread* Settings::settingsThread{nullptr};
Settings::Settings() Settings::Settings()

4
src/persistence/settings.h

@ -29,6 +29,8 @@
#include "src/persistence/igroupsettings.h" #include "src/persistence/igroupsettings.h"
#include "src/video/ivideosettings.h" #include "src/video/ivideosettings.h"
#include "src/util/compatiblerecursivemutex.h"
#include <QDateTime> #include <QDateTime>
#include <QFlags> #include <QFlags>
#include <QFont> #include <QFont>
@ -703,7 +705,7 @@ private:
int themeColor; int themeColor;
static QMutex bigLock; static CompatibleRecursiveMutex bigLock;
static Settings* settings; static Settings* settings;
static const QString globalSettingsFile; static const QString globalSettingsFile;
static QThread* settingsThread; static QThread* settingsThread;

36
src/util/compatiblerecursivemutex.h

@ -0,0 +1,36 @@
/*
Copyright © 2021 by The qTox Project Contributors
This file is part of qTox, a Qt-based graphical interface for Tox.
qTox is libre software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
qTox is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with qTox. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <QtGlobal>
#include <QMutex>
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
class CompatibleRecursiveMutex : public QRecursiveMutex
{};
#else
class CompatibleRecursiveMutex : public QMutex
{
public:
CompatibleRecursiveMutex()
: QMutex(QMutex::Recursive)
{}
};
#endif

36
util/include/util/compatiblerecursivemutex.h

@ -0,0 +1,36 @@
/*
Copyright © 2021 by The qTox Project Contributors
This file is part of qTox, a Qt-based graphical interface for Tox.
qTox is libre software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
qTox is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with qTox. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <QtGlobal>
#include <QMutex>
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
class CompatibleRecursiveMutex : public QRecursiveMutex
{};
#else
class CompatibleRecursiveMutex : public QMutex
{
public:
CompatibleRecursiveMutex()
: QMutex(QMutex::Recursive)
{}
};
#endif
Loading…
Cancel
Save