From 26fcea0639ba3af839b0e2017342f92cfdb83df7 Mon Sep 17 00:00:00 2001 From: sudden6 Date: Mon, 27 Jan 2020 23:44:19 +0100 Subject: [PATCH] fix(coreav): change some lock to write locks I missed some cases where data was written. (cherry picked from commit dfcfb7d5e00eb561d659fe236f4aa06b014ee643) --- src/core/coreav.cpp | 14 +++++++------- src/core/coreav.h | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/core/coreav.cpp b/src/core/coreav.cpp index ce17ae4a9..dd95db943 100644 --- a/src/core/coreav.cpp +++ b/src/core/coreav.cpp @@ -365,7 +365,7 @@ bool CoreAV::sendCallAudio(uint32_t callId, const int16_t* pcm, size_t samples, void CoreAV::sendCallVideo(uint32_t callId, std::shared_ptr vframe) { - QReadLocker locker{&callsLock}; + QWriteLocker locker{&callsLock}; // We might be running in the FFmpeg thread and holding the CameraSource lock // So be careful not to deadlock with anything while toxav locks in toxav_video_send_frame @@ -420,7 +420,7 @@ void CoreAV::sendCallVideo(uint32_t callId, std::shared_ptr vframe) */ void CoreAV::toggleMuteCallInput(const Friend* f) { - QReadLocker locker{&callsLock}; + QWriteLocker locker{&callsLock}; auto it = calls.find(f->getId()); if (f && (it != calls.end())) { @@ -435,7 +435,7 @@ void CoreAV::toggleMuteCallInput(const Friend* f) */ void CoreAV::toggleMuteCallOutput(const Friend* f) { - QReadLocker locker{&callsLock}; + QWriteLocker locker{&callsLock}; auto it = calls.find(f->getId()); if (f && (it != calls.end())) { @@ -503,7 +503,7 @@ void CoreAV::groupCallCallback(void* tox, uint32_t group, uint32_t peer, const i */ void CoreAV::invalidateGroupCallPeerSource(int group, ToxPk peerPk) { - QReadLocker locker{&callsLock}; + QWriteLocker locker{&callsLock}; auto it = groupCalls.find(group); if (it == groupCalls.end()) { @@ -595,7 +595,7 @@ bool CoreAV::sendGroupCallAudio(int groupId, const int16_t* pcm, size_t samples, */ void CoreAV::muteCallInput(const Group* g, bool mute) { - QReadLocker locker{&callsLock}; + QWriteLocker locker{&callsLock}; auto it = groupCalls.find(g->getId()); if (g && (it != groupCalls.end())) { @@ -610,7 +610,7 @@ void CoreAV::muteCallInput(const Group* g, bool mute) */ void CoreAV::muteCallOutput(const Group* g, bool mute) { - QReadLocker locker{&callsLock}; + QWriteLocker locker{&callsLock}; auto it = groupCalls.find(g->getId()); if (g && (it != groupCalls.end())) { @@ -694,7 +694,7 @@ bool CoreAV::isCallOutputMuted(const Friend* f) const */ void CoreAV::sendNoVideo() { - QReadLocker locker{&callsLock}; + QWriteLocker locker{&callsLock}; // We don't change the audio bitrate, but we signal that we're not sending video anymore qDebug() << "CoreAV: Signaling end of video sending"; diff --git a/src/core/coreav.h b/src/core/coreav.h index 42c5d0fed..73378ce72 100644 --- a/src/core/coreav.h +++ b/src/core/coreav.h @@ -113,7 +113,7 @@ private: } }; - explicit CoreAV(std::unique_ptr tox, QMutex &toxCoreLock); + CoreAV(std::unique_ptr tox, QMutex &toxCoreLock); void connectCallbacks(ToxAV& toxav); void process(); @@ -148,7 +148,7 @@ private: */ std::map groupCalls; - // protect 'calls' and 'groupCalls' from being modified by ToxAV and Tox threads + // protect 'calls' and 'groupCalls' mutable QReadWriteLock callsLock{QReadWriteLock::Recursive}; /**