summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Kundiman <erik@megapahit.org>2025-10-22 19:19:53 +0800
committerErik Kundiman <erik@megapahit.org>2025-10-22 19:19:53 +0800
commitbde975ccc6919a05f526fc31cd187071543a51d9 (patch)
tree11ed210ddda29d17a4270cb1e6821d9afcfcb3b8
parentdc8cd76c98360e66833b298cdbdc423f3871c4e3 (diff)
parent57a9e51360aebf142bbbdc2663f68ebacfb7d8f5 (diff)
Merge tag 'Second_Life_Release#57a9e513-2025.07' into 2025.07
-rw-r--r--indra/llwebrtc/llwebrtc.cpp4
-rw-r--r--indra/newview/llvoicewebrtc.cpp15
-rw-r--r--indra/newview/llvoicewebrtc.h4
3 files changed, 22 insertions, 1 deletions
diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp
index 4f90abc616..7e2b5d2741 100644
--- a/indra/llwebrtc/llwebrtc.cpp
+++ b/indra/llwebrtc/llwebrtc.cpp
@@ -1511,6 +1511,10 @@ void freePeerConnection(LLWebRTCPeerConnectionInterface* peer_connection)
void init(LLWebRTCLogCallback* logCallback)
{
+ if (gWebRTCImpl)
+ {
+ return;
+ }
gWebRTCImpl = new LLWebRTCImpl(logCallback);
gWebRTCImpl->init();
}
diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp
index 39a0671bb2..e1667c505e 100644
--- a/indra/newview/llvoicewebrtc.cpp
+++ b/indra/newview/llvoicewebrtc.cpp
@@ -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;
}
@@ -1805,6 +1811,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);
diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h
index 4c40ebcffb..0c658803db 100644
--- a/indra/newview/llvoicewebrtc.h
+++ b/indra/newview/llvoicewebrtc.h
@@ -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
//---