Skip to content
This repository has been archived by the owner on Feb 12, 2023. It is now read-only.

Commit

Permalink
fix: Replace deprecated QMutex::Recursive with QRecursiveMutex
Browse files Browse the repository at this point in the history
  • Loading branch information
anthonybilinski committed Jun 6, 2021
1 parent 8c34fa8 commit 8276141
Show file tree
Hide file tree
Showing 17 changed files with 74 additions and 26 deletions.
1 change: 0 additions & 1 deletion audio/src/backend/alsink.cpp
Expand Up @@ -101,7 +101,6 @@ void AlSink::kill()
AlSink::AlSink(OpenAL& al, uint sourceId)
: audio(al)
, sourceId{sourceId}
, killLock(QMutex::Recursive)
{}

AlSink::operator bool() const
Expand Down
3 changes: 2 additions & 1 deletion audio/src/backend/alsink.h
Expand Up @@ -23,6 +23,7 @@
#include <QObject>

#include "util/interface.h"
#include "util/compatiblerecursivemutex.h"
#include "audio/iaudiosink.h"

class OpenAL;
Expand Down Expand Up @@ -55,5 +56,5 @@ class AlSink : public QObject, public IAudioSink
OpenAL& audio;
uint sourceId;
bool killed = false;
mutable QMutex killLock;
mutable CompatibleRecursiveMutex killLock;
};
1 change: 0 additions & 1 deletion audio/src/backend/alsource.cpp
Expand Up @@ -30,7 +30,6 @@
*/
AlSource::AlSource(OpenAL& al)
: audio(al)
, killLock(QMutex::Recursive)
{}

AlSource::~AlSource()
Expand Down
3 changes: 2 additions & 1 deletion audio/src/backend/alsource.h
Expand Up @@ -20,6 +20,7 @@
#pragma once

#include "audio/iaudiosource.h"
#include "util/compatiblerecursivemutex.h"
#include <QMutex>
#include <QObject>

Expand All @@ -42,5 +43,5 @@ class AlSource : public IAudioSource
private:
OpenAL& audio;
bool killed = false;
mutable QMutex killLock;
mutable CompatibleRecursiveMutex killLock;
};
3 changes: 2 additions & 1 deletion audio/src/backend/openal.h
Expand Up @@ -23,6 +23,7 @@
#include "audio/iaudiocontrol.h"
#include "alsink.h"
#include "alsource.h"
#include "util/compatiblerecursivemutex.h"

#include <memory>
#include <unordered_set>
Expand Down Expand Up @@ -132,7 +133,7 @@ class OpenAL : public IAudioControl
protected:
IAudioSettings& settings;
QThread* audioThread;
mutable QMutex audioLock{QMutex::Recursive};
mutable CompatibleRecursiveMutex audioLock;
QString inDev{};
QString outDev{};

Expand Down
3 changes: 2 additions & 1 deletion src/core/core.cpp
Expand Up @@ -33,6 +33,7 @@
#include "src/model/ibootstraplistgenerator.h"
#include "src/persistence/profile.h"
#include "util/strongtype.h"
#include "util/compatiblerecursivemutex.h"

#include <QCoreApplication>
#include <QDateTime>
Expand Down Expand Up @@ -715,7 +716,7 @@ Tox* Core::getTox() const
return tox.get();
}

QMutex &Core::getCoreLoopLock() const
CompatibleRecursiveMutex &Core::getCoreLoopLock() const
{
return coreLoopLock;
}
Expand Down
5 changes: 3 additions & 2 deletions src/core/core.h
Expand Up @@ -31,6 +31,7 @@
#include "toxpk.h"

#include "util/strongtype.h"
#include "util/compatiblerecursivemutex.h"
#include "src/model/status.h"
#include <tox/tox.h>

Expand Down Expand Up @@ -78,7 +79,7 @@ class Core : public QObject,

CoreFile* getCoreFile() const;
Tox* getTox() const;
QMutex& getCoreLoopLock() const;
CompatibleRecursiveMutex& getCoreLoopLock() const;

const CoreExt* getExt() const;
CoreExt* getExt();
Expand Down Expand Up @@ -258,7 +259,7 @@ private slots:
std::unique_ptr<CoreExt> ext;
QTimer* toxTimer = nullptr;
// recursive, since we might call our own functions
mutable QMutex coreLoopLock{QMutex::Recursive};
mutable CompatibleRecursiveMutex coreLoopLock;

std::unique_ptr<QThread> coreThread;
IBootstrapListGenerator& bootstrapNodes;
Expand Down
5 changes: 3 additions & 2 deletions src/core/coreav.cpp
Expand Up @@ -26,6 +26,7 @@
#include "src/persistence/igroupsettings.h"
#include "src/video/corevideosource.h"
#include "src/video/videoframe.h"
#include "util/compatiblerecursivemutex.h"
#include <QCoreApplication>
#include <QDebug>
#include <QThread>
Expand Down Expand Up @@ -69,7 +70,7 @@
* deadlock.
*/

CoreAV::CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> toxav, QMutex& toxCoreLock,
CoreAV::CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> toxav, CompatibleRecursiveMutex& toxCoreLock,
IAudioSettings& _audioSettings, IGroupSettings& _groupSettings)
: audio{nullptr}
, toxav{std::move(toxav)}
Expand Down Expand Up @@ -109,7 +110,7 @@ void CoreAV::connectCallbacks(ToxAV& toxav)
* @param core pointer to the Tox instance
* @return CoreAV instance on success, {} on failure
*/
CoreAV::CoreAVPtr CoreAV::makeCoreAV(Tox* core, QMutex& toxCoreLock,
CoreAV::CoreAVPtr CoreAV::makeCoreAV(Tox* core, CompatibleRecursiveMutex& toxCoreLock,
IAudioSettings& audioSettings, IGroupSettings& groupSettings)
{
Toxav_Err_New err;
Expand Down
7 changes: 4 additions & 3 deletions src/core/coreav.h
Expand Up @@ -21,6 +21,7 @@
#pragma once

#include "src/core/toxcall.h"
#include "util/compatiblerecursivemutex.h"

#include <QObject>
#include <QMutex>
Expand Down Expand Up @@ -49,7 +50,7 @@ class CoreAV : public QObject

public:
using CoreAVPtr = std::unique_ptr<CoreAV>;
static CoreAVPtr makeCoreAV(Tox* core, QMutex& toxCoreLock,
static CoreAVPtr makeCoreAV(Tox* core, CompatibleRecursiveMutex& toxCoreLock,
IAudioSettings& audioSettings, IGroupSettings& groupSettings);

void setAudio(IAudioControl& newAudio);
Expand Down Expand Up @@ -116,7 +117,7 @@ private slots:
}
};

CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> tox, QMutex &toxCoreLock,
CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> tox, CompatibleRecursiveMutex &toxCoreLock,
IAudioSettings& _audioSettings, IGroupSettings& _groupSettings);
void connectCallbacks(ToxAV& toxav);

Expand Down Expand Up @@ -160,7 +161,7 @@ private slots:
* 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
*/
QMutex& coreLock;
CompatibleRecursiveMutex& coreLock;

IAudioSettings& audioSettings;
IGroupSettings& groupSettings;
Expand Down
5 changes: 3 additions & 2 deletions src/core/corefile.cpp
Expand Up @@ -25,6 +25,7 @@
#include "src/persistence/settings.h"
#include "src/model/status.h"
#include "src/model/toxclientstandards.h"
#include "util/compatiblerecursivemutex.h"
#include <QDebug>
#include <QDir>
#include <QFile>
Expand All @@ -38,7 +39,7 @@
* @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(tox != nullptr);
Expand All @@ -49,7 +50,7 @@ CoreFilePtr CoreFile::makeCoreFile(Core *core, Tox *tox, QMutex &coreLoopLock)
return result;
}

CoreFile::CoreFile(Tox *core, QMutex &coreLoopLock)
CoreFile::CoreFile(Tox *core, CompatibleRecursiveMutex &coreLoopLock)
: tox{core}
, coreLoopLock{&coreLoopLock}
{
Expand Down
8 changes: 5 additions & 3 deletions src/core/corefile.h
Expand Up @@ -27,6 +27,8 @@
#include "src/core/toxpk.h"
#include "src/model/status.h"

#include "util/compatiblerecursivemutex.h"

#include <QHash>
#include <QMutex>
#include <QObject>
Expand All @@ -47,7 +49,7 @@ class CoreFile : public QObject

public:
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,
long long filesize);
Expand Down Expand Up @@ -77,7 +79,7 @@ class CoreFile : public QObject
void fileSendFailed(uint32_t friendId, const QString& fname);

private:
CoreFile(Tox* core, QMutex& coreLoopLock);
CoreFile(Tox* core, CompatibleRecursiveMutex& coreLoopLock);

ToxFile* findFile(uint32_t friendId, uint32_t fileId);
void addFile(uint32_t friendId, uint32_t fileId, const ToxFile& file);
Expand Down Expand Up @@ -106,5 +108,5 @@ private slots:
private:
QHash<uint64_t, ToxFile> fileMap;
Tox* tox;
QMutex* coreLoopLock = nullptr;
CompatibleRecursiveMutex* coreLoopLock = nullptr;
};
4 changes: 0 additions & 4 deletions src/persistence/offlinemsgengine.cpp
Expand Up @@ -29,10 +29,6 @@
#include <QCoreApplication>
#include <chrono>

OfflineMsgEngine::OfflineMsgEngine()
: mutex(QMutex::Recursive)
{}

/**
* @brief Notification that the message is now delivered.
*
Expand Down
7 changes: 5 additions & 2 deletions src/persistence/offlinemsgengine.h
Expand Up @@ -23,6 +23,9 @@
#include "src/core/core.h"
#include "src/model/message.h"
#include "src/persistence/db/rawdatabase.h"

#include "util/compatiblerecursivemutex.h"

#include <QDateTime>
#include <QMap>
#include <QMutex>
Expand All @@ -36,7 +39,7 @@ class OfflineMsgEngine : public QObject
Q_OBJECT
public:
using CompletionFn = std::function<void(bool)>;
OfflineMsgEngine();
OfflineMsgEngine() = default;
void addUnsentMessage(Message const& message, CompletionFn completionCallback);
void addSentCoreMessage(ReceiptNum receipt, Message const& message, CompletionFn completionCallback);
void addSentExtendedMessage(ExtendedReceiptNum receipt, Message const& message, CompletionFn completionCallback);
Expand All @@ -60,7 +63,7 @@ public slots:
CompletionFn completionFn;
};

QMutex mutex;
CompatibleRecursiveMutex mutex;

template <class ReceiptT>
class ReceiptResolver
Expand Down
4 changes: 3 additions & 1 deletion src/persistence/settings.cpp
Expand Up @@ -33,6 +33,8 @@
#endif
#include "src/ipc.h"

#include "util/compatiblerecursivemutex.h"

#include <QApplication>
#include <QCryptographicHash>
#include <QDebug>
Expand All @@ -57,7 +59,7 @@

const QString Settings::globalSettingsFile = "qtox.ini";
Settings* Settings::settings{nullptr};
QMutex Settings::bigLock{QMutex::Recursive};
CompatibleRecursiveMutex Settings::bigLock;
QThread* Settings::settingsThread{nullptr};

Settings::Settings()
Expand Down
4 changes: 3 additions & 1 deletion src/persistence/settings.h
Expand Up @@ -30,6 +30,8 @@
#include "src/persistence/inotificationsettings.h"
#include "src/video/ivideosettings.h"

#include "util/compatiblerecursivemutex.h"

#include <QDateTime>
#include <QFlags>
#include <QFont>
Expand Down Expand Up @@ -706,7 +708,7 @@ public slots:

int themeColor;

static QMutex bigLock;
static CompatibleRecursiveMutex bigLock;
static Settings* settings;
static const QString globalSettingsFile;
static QThread* settingsThread;
Expand Down
1 change: 1 addition & 0 deletions util/CMakeLists.txt
Expand Up @@ -15,6 +15,7 @@
# along with qTox. If not, see <http://www.gnu.org/licenses/>

set(HEADER_LIST
"include/util/compatiblerecursivemutex.h"
"include/util/interface.h"
"include/util/strongtype.h")

Expand Down
36 changes: 36 additions & 0 deletions 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

0 comments on commit 8276141

Please sign in to comment.