diff options
author | Roxie Linden <roxie@lindenlab.com> | 2024-05-08 14:22:43 -0700 |
---|---|---|
committer | Roxie Linden <roxie@lindenlab.com> | 2024-05-08 14:22:43 -0700 |
commit | c628c1f6e41f08c00540cf7f9ff3a5799faf0144 (patch) | |
tree | 4d51dd366e2e2ce69610a06e7ab767824ab8869c /indra | |
parent | 74028326e8b81ec7ead20b1f2a4d7d1a7f4009d0 (diff) |
Fix some session shutdown/error handling code
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llvoiceclient.cpp | 5 | ||||
-rw-r--r-- | indra/newview/llvoicewebrtc.cpp | 85 |
2 files changed, 35 insertions, 55 deletions
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 6eadc3892e..8bd3897761 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -496,11 +496,6 @@ void LLVoiceClient::leaveNonSpatialChannel() mNonSpatialVoiceModule->processChannels(false); mNonSpatialVoiceModule = nullptr; } - if (mSpatialVoiceModule) - { - mSpatialVoiceModule->processChannels(true); - ; - } } void LLVoiceClient::activateSpatialChannel(bool activate) diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index b5c93d87f5..e72d5e6066 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -2127,11 +2127,8 @@ LLVoiceWebRTCConnection::~LLVoiceWebRTCConnection() // by llwebrtc::terminate() on shutdown. return; } - if (mWebRTCPeerConnectionInterface) - { - llwebrtc::freePeerConnection(mWebRTCPeerConnectionInterface); - mWebRTCPeerConnectionInterface = nullptr; - } + mWebRTCPeerConnectionInterface->unsetSignalingObserver(this); + llwebrtc::freePeerConnection(mWebRTCPeerConnectionInterface); } @@ -2468,19 +2465,11 @@ void LLVoiceWebRTCConnection::breakVoiceConnectionCoro() // also shut things down. LLSD result = httpAdapter->postAndSuspend(httpRequest, url, body, httpOpts); - if (LLWebRTCVoiceClient::isShuttingDown()) - { - mOutstandingRequests--; - return; - } - - if (mWebRTCPeerConnectionInterface) + mOutstandingRequests--; + if (!LLWebRTCVoiceClient::isShuttingDown()) { - mWebRTCPeerConnectionInterface->shutdownConnection(); + setVoiceConnectionState(VOICE_STATE_SESSION_EXIT); } - setVoiceConnectionState(VOICE_STATE_SESSION_EXIT); - - mOutstandingRequests--; } // Tell the simulator to tell the Secondlife WebRTC server that we want a voice @@ -2555,7 +2544,7 @@ void LLVoiceWebRTCSpatialConnection::requestVoiceConnection() mCurrentStatus = LLVoiceClientStatusObserver::ERROR_UNKNOWN; break; } - setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); + setVoiceConnectionState(VOICE_STATE_SESSION_EXIT); } mOutstandingRequests--; } @@ -2582,7 +2571,7 @@ void LLVoiceWebRTCConnection::OnVoiceConnectionRequestSuccess(const LLSD &result else { LL_WARNS("Voice") << "Invalid voice provision request result:" << result << LL_ENDL; - setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); + setVoiceConnectionState(VOICE_STATE_SESSION_EXIT); return; } @@ -2628,7 +2617,7 @@ bool LLVoiceWebRTCConnection::connectionStateMachine() LL_PROFILE_ZONE_NAMED_CATEGORY_VOICE("VOICE_STATE_START_SESSION") if (mShutDown) { - setVoiceConnectionState(VOICE_STATE_DISCONNECT); + setVoiceConnectionState(VOICE_STATE_SESSION_EXIT); break; } mIceCompleted = false; @@ -2648,7 +2637,7 @@ bool LLVoiceWebRTCConnection::connectionStateMachine() { if (mShutDown) { - setVoiceConnectionState(VOICE_STATE_DISCONNECT); + setVoiceConnectionState(VOICE_STATE_SESSION_EXIT); } break; } @@ -2656,7 +2645,7 @@ bool LLVoiceWebRTCConnection::connectionStateMachine() case VOICE_STATE_REQUEST_CONNECTION: if (mShutDown) { - setVoiceConnectionState(VOICE_STATE_DISCONNECT); + setVoiceConnectionState(VOICE_STATE_SESSION_EXIT); break; } // Ask the sim to ask the Secondlife WebRTC server for a connection to @@ -2752,20 +2741,20 @@ bool LLVoiceWebRTCConnection::connectionStateMachine() case VOICE_STATE_SESSION_EXIT: { + mWebRTCPeerConnectionInterface->shutdownConnection(); + + if (!mShutDown) { - if (!mShutDown) - { - mVoiceConnectionState = VOICE_STATE_START_SESSION; - } - else + mVoiceConnectionState = VOICE_STATE_START_SESSION; + } + else + { + // if we still have outstanding http or webrtc calls, wait for them to + // complete so we don't delete objects while they still may be used. + if (mOutstandingRequests <= 0) { - // if we still have outstanding http or webrtc calls, wait for them to - // complete so we don't delete objects while they still may be used. - if (mOutstandingRequests <= 0) - { - LLWebRTCVoiceClient::getInstance()->OnConnectionShutDown(mChannelID, mRegionID); - return false; - } + LLWebRTCVoiceClient::getInstance()->OnConnectionShutDown(mChannelID, mRegionID); + return false; } } break; @@ -2986,14 +2975,6 @@ LLVoiceWebRTCSpatialConnection::LLVoiceWebRTCSpatialConnection(const LLUUID ® LLVoiceWebRTCSpatialConnection::~LLVoiceWebRTCSpatialConnection() { - if (LLWebRTCVoiceClient::isShuttingDown()) - { - // peer connection and observers will be cleaned up - // by llwebrtc::terminate() on shutdown. - return; - } - assert(mOutstandingRequests == 0); - mWebRTCPeerConnectionInterface->unsetSignalingObserver(this); } void LLVoiceWebRTCSpatialConnection::setMuteMic(bool muted) @@ -3032,14 +3013,6 @@ LLVoiceWebRTCAdHocConnection::LLVoiceWebRTCAdHocConnection(const LLUUID ®ionI LLVoiceWebRTCAdHocConnection::~LLVoiceWebRTCAdHocConnection() { - if (LLWebRTCVoiceClient::isShuttingDown()) - { - // peer connection and observers will be cleaned up - // by llwebrtc::terminate() on shutdown. - return; - } - assert(mOutstandingRequests == 0); - mWebRTCPeerConnectionInterface->unsetSignalingObserver(this); } // Add-hoc connections require a different channel type @@ -3096,7 +3069,19 @@ void LLVoiceWebRTCAdHocConnection::requestVoiceConnection() if (!status) { - setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); + switch (status.getType()) + { + case HTTP_CONFLICT: + mCurrentStatus = LLVoiceClientStatusObserver::ERROR_CHANNEL_FULL; + break; + case HTTP_UNAUTHORIZED: + mCurrentStatus = LLVoiceClientStatusObserver::ERROR_CHANNEL_LOCKED; + break; + default: + mCurrentStatus = LLVoiceClientStatusObserver::ERROR_UNKNOWN; + break; + } + setVoiceConnectionState(VOICE_STATE_SESSION_EXIT); } else { |