summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2024-11-04 23:45:48 +0200
committerAndrey Kleshchev <117672381+akleshchev@users.noreply.github.com>2024-11-07 00:08:30 +0200
commitb4bd89b07e6116eba8bc64a2056970994ad9cfff (patch)
tree1ad716d72ad0fba58bee56f73d5da94f60880e0d
parent55732f7343fa574a8dfcbfd807e69b1fb56e9209 (diff)
RaiseException on voiceControlCoro
For some reason try block from voiceControlCoro doesn't trigger, but one from toplevel does and claim that it's voiceControlCoro, logs also suggest that vivox was doing an outgoing call. This is mostly to get evidence.
-rw-r--r--indra/newview/llviewerobjectlist.cpp2
-rw-r--r--indra/newview/llvoicevivox.cpp51
2 files changed, 39 insertions, 14 deletions
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 9e1d86faac..d667fdbea8 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -402,7 +402,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
LLViewerObject *objectp;
S32 num_objects;
- U32 local_id;
+ U32 local_id = 0;
LLPCode pcode = 0;
LLUUID fullid;
S32 i;
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 1e934ade59..7d6ad743bd 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -2024,23 +2024,48 @@ bool LLVivoxVoiceClient::waitForChannel()
llcoro::suspend();
break;
}
- sessionStatePtr_t joinSession = mNextAudioSession;
- mNextAudioSession.reset();
- mIsProcessingChannels = true;
- if (!runSession(joinSession)) //suspends
+
+ try
{
- mIsProcessingChannels = false;
- LL_DEBUGS("Voice") << "runSession returned false; leaving inner loop" << LL_ENDL;
- break;
+ sessionStatePtr_t joinSession = mNextAudioSession;
+ mNextAudioSession.reset();
+ mIsProcessingChannels = true;
+ if (!runSession(joinSession)) //suspends
+ {
+ mIsProcessingChannels = false;
+ LL_DEBUGS("Voice") << "runSession returned false; leaving inner loop" << LL_ENDL;
+ break;
+ }
+ else
+ {
+ mIsProcessingChannels = false;
+ LL_DEBUGS("Voice")
+ << "runSession returned true to inner loop"
+ << " RelogRequested=" << mRelogRequested
+ << " VoiceEnabled=" << mVoiceEnabled
+ << LL_ENDL;
+ }
}
- else
+ catch (const LLCoros::Stop&)
+ {
+ LL_DEBUGS("LLVivoxVoiceClient") << "Received a shutdown exception" << LL_ENDL;
+ }
+ catch (const LLContinueError&)
+ {
+ LOG_UNHANDLED_EXCEPTION("LLVivoxVoiceClient");
+ }
+ catch (...)
{
- mIsProcessingChannels = false;
- LL_DEBUGS("Voice")
- << "runSession returned true to inner loop"
- << " RelogRequested=" << mRelogRequested
- << " VoiceEnabled=" << mVoiceEnabled
+ // Ideally for Windows need to log SEH exception instead or to set SEH
+ // handlers but bugsplat shows local variables for windows, which should
+ // be enough
+ LL_WARNS("Voice") << "voiceControlStateMachine crashed in state VOICE_CHANNEL_STATE_PROCESS_CHANNEL"
+ << " mRelogRequested " << mRelogRequested
+ << " mVoiceEnabled " << mVoiceEnabled
+ << " mIsProcessingChannels " << mIsProcessingChannels
+ << " mProcessChannels " << mProcessChannels
<< LL_ENDL;
+ throw;
}
}