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

Commit

Permalink
fix(coreav): change some lock to write locks
Browse files Browse the repository at this point in the history
I missed some cases where data was written.

(cherry picked from commit dfcfb7d)
  • Loading branch information
sudden6 authored and anthonybilinski committed Mar 20, 2020
1 parent e340688 commit 26fcea0
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
14 changes: 7 additions & 7 deletions src/core/coreav.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<VideoFrame> 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
Expand Down Expand Up @@ -420,7 +420,7 @@ void CoreAV::sendCallVideo(uint32_t callId, std::shared_ptr<VideoFrame> vframe)
*/
void CoreAV::toggleMuteCallInput(const Friend* f)
{
QReadLocker locker{&callsLock};
QWriteLocker locker{&callsLock};

auto it = calls.find(f->getId());
if (f && (it != calls.end())) {
Expand All @@ -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())) {
Expand Down Expand Up @@ -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()) {
Expand Down Expand Up @@ -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())) {
Expand All @@ -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())) {
Expand Down Expand Up @@ -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";
Expand Down
4 changes: 2 additions & 2 deletions src/core/coreav.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ private slots:
}
};

explicit CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> tox, QMutex &toxCoreLock);
CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> tox, QMutex &toxCoreLock);
void connectCallbacks(ToxAV& toxav);

void process();
Expand Down Expand Up @@ -148,7 +148,7 @@ private slots:
*/
std::map<int, ToxGroupCallPtr> groupCalls;

// protect 'calls' and 'groupCalls' from being modified by ToxAV and Tox threads
// protect 'calls' and 'groupCalls'
mutable QReadWriteLock callsLock{QReadWriteLock::Recursive};

/**
Expand Down

0 comments on commit 26fcea0

Please sign in to comment.