#4819 WebRTC crashes after a failed login

master
Andrey Kleshchev 2025-10-13 20:16:52 +03:00 committed by Ansariel
parent 14e3561f67
commit dc54661b3a
3 changed files with 22 additions and 1 deletions

View File

@ -1495,6 +1495,10 @@ void freePeerConnection(LLWebRTCPeerConnectionInterface* peer_connection)
void init(LLWebRTCLogCallback* logCallback)
{
if (gWebRTCImpl)
{
return;
}
gWebRTCImpl = new LLWebRTCImpl(logCallback);
gWebRTCImpl->init();
}

View File

@ -273,6 +273,11 @@ void LLWebRTCVoiceClient::cleanupSingleton()
void LLWebRTCVoiceClient::init(LLPumpIO* pump)
{
// constructor will set up LLVoiceClient::getInstance()
initWebRTC();
}
void LLWebRTCVoiceClient::initWebRTC()
{
llwebrtc::init(this);
mWebRTCDeviceInterface = llwebrtc::getDeviceInterface();
@ -292,6 +297,7 @@ void LLWebRTCVoiceClient::terminate()
mVoiceEnabled = false;
llwebrtc::terminate();
mWebRTCDeviceInterface = nullptr;
sShuttingDown = true;
}
@ -1813,6 +1819,15 @@ void LLWebRTCVoiceClient::onChangeDetailed(const LLMute& mute)
}
}
void LLWebRTCVoiceClient::userAuthorized(const std::string& user_id, const LLUUID& agentID)
{
if (sShuttingDown)
{
sShuttingDown = false; // was terminated, restart
initWebRTC();
}
}
void LLWebRTCVoiceClient::predSetUserMute(const LLWebRTCVoiceClient::sessionStatePtr_t &session, const LLUUID &id, bool mute)
{
session->setUserMute(id, mute);

View File

@ -204,7 +204,7 @@ public:
//@}
// authorize the user
void userAuthorized(const std::string &user_id, const LLUUID &agentID) override {};
void userAuthorized(const std::string &user_id, const LLUUID &agentID) override;
void OnConnectionEstablished(const std::string& channelID, const LLUUID& regionID);
@ -443,6 +443,8 @@ public:
boost::signals2::connection mAvatarNameCacheConnection;
private:
// init or restart the WebRTC device interface.
void initWebRTC();
// Coroutine support methods
//---