Skip to content

Commit

Permalink
Extensions - Fix TeamSpeak v3.6.0 deadlock (#1281)
Browse files Browse the repository at this point in the history
  • Loading branch information
jonpas authored Sep 9, 2023
1 parent 8e4a4c8 commit 656a4aa
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions extensions/src/ACRE2Core/updateSpeakingData.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ RPC_FUNCTION(updateSpeakingData) {
}
}
TRACE("SPEAKING DATA: %s", vMessage->getData());
bool unmute = false;

CEngine::getInstance()->getSoundEngine()->getSoundMixer()->lock();
if (speaker) {
LOCK(speaker);
Expand Down Expand Up @@ -76,9 +78,7 @@ RPC_FUNCTION(updateSpeakingData) {
// want.
const int32_t count = vMessage->getParameterAsInt(3);
speaker->setSpeakingType(acre::Speaking::radio);
if (CEngine::getInstance()->getClient()->getMuted(playerId) == acre::Result::ok) {
CEngine::getInstance()->getClient()->setMuted(playerId, false);
}
unmute = true;
for (int32_t i = 0; i < count; ++i) {
const int32_t channelId = i + 1;
if (!speaker->channels[channelId]) {
Expand Down Expand Up @@ -137,9 +137,7 @@ RPC_FUNCTION(updateSpeakingData) {
} else {
speaker->setSpeakingType(acre::Speaking::god);
}
if (CEngine::getInstance()->getClient()->getMuted(playerId) == acre::Result::ok) {
CEngine::getInstance()->getClient()->setMuted(playerId, false);
}
unmute = true;
if (speaker->channels[0]) {
speaker->channels[0]->getEffectInsert(7)->setParam("volume", vMessage->getParameterAsFloat(3));
}
Expand All @@ -149,6 +147,13 @@ RPC_FUNCTION(updateSpeakingData) {
UNLOCK(speaker);
}
CEngine::getInstance()->getSoundEngine()->getSoundMixer()->unlock();

if (unmute) {
if (CEngine::getInstance()->getClient()->getMuted(playerId) == acre::Result::ok) {
CEngine::getInstance()->getClient()->setMuted(playerId, false);
}
}

return acre::Result::ok;
}
public:
Expand Down

0 comments on commit 656a4aa

Please sign in to comment.