SL-15292 waitForChannel crash

This code needs to be turned into a state machine (switch-case between states) with clean exit and each state clean and separate. Right now it passes through all stages on exit and relies onto multiple bools instead of just transitioning to 'exit' state. In some cases coroutine still lives longer than voice singletone, it also needs to be adressed.
meow-7.2.2
Andrey Kleshchev 2021-08-13 22:45:33 +03:00
parent 12836d5f91
commit f9c5875350
1 changed files with 16 additions and 7 deletions

View File

@ -1880,13 +1880,22 @@ bool LLVivoxVoiceClient::waitForChannel()
break;
}
} while (mVoiceEnabled && !mRelogRequested && !sShuttingDown);
} while (!sShuttingDown && mVoiceEnabled && !mRelogRequested);
LL_DEBUGS("Voice")
<< "leaving inner waitForChannel loop"
<< " RelogRequested=" << mRelogRequested
<< " VoiceEnabled=" << mVoiceEnabled
<< LL_ENDL;
if (!sShuttingDown)
{
LL_DEBUGS("Voice")
<< "leaving inner waitForChannel loop"
<< " RelogRequested=" << mRelogRequested
<< " VoiceEnabled=" << mVoiceEnabled
<< LL_ENDL;
}
else
{
// if sShuttingDown is set, we already logged out
LL_DEBUGS("Voice") << "leaving inner waitForChannel loop." << LL_ENDL;
return false;
}
mIsProcessingChannels = false;
@ -1902,7 +1911,7 @@ bool LLVivoxVoiceClient::waitForChannel()
return false;
}
}
} while (mVoiceEnabled && mRelogRequested && isGatewayRunning() && !sShuttingDown);
} while (!sShuttingDown && mVoiceEnabled && mRelogRequested && isGatewayRunning());
LL_DEBUGS("Voice")
<< "exiting"