diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2020-11-25 18:09:18 +0200 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2020-11-25 18:09:54 +0200 | 
| commit | 47bd603ceb2862f0aa389f8beb5376f0d6fdfcf9 (patch) | |
| tree | 8c5e93ef91dd39d3a0e0751b7b1af248ac337ef0 | |
| parent | 10fa792e115fd4be00931b25662545b6bb4c47f2 (diff) | |
SL-13733 One more vivox shutdown crash
Vivox was using dead pump
| -rw-r--r-- | indra/newview/llappviewer.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llvoiceclient.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llvoicevivox.cpp | 14 | 
4 files changed, 13 insertions, 4 deletions
| diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 8045da66d0..0596df4ddb 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1620,6 +1620,7 @@ bool LLAppViewer::doFrame()  		}  		delete gServicePump; +		gServicePump = NULL;  		destroyMainloopTimeout(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 0c81c44a57..cb37f268f2 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2323,7 +2323,6 @@ void LLViewerWindow::shutdownGL()  LLViewerWindow::~LLViewerWindow()  {  	LL_INFOS() << "Destroying Window" << LL_ENDL; -	gDebugWindowProc = TRUE; // event catching, disable once we figure out cause for exit crashes  	destroyWindow();  	delete mDebugText; diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 377f3174f3..6991ca6698 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -180,6 +180,7 @@ void LLVoiceClient::terminate()  {  	if (mVoiceModule) mVoiceModule->terminate();  	mVoiceModule = NULL; +    m_servicePump = NULL;  }  const LLVoiceVersionInfo LLVoiceClient::getVersion() diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index a8d668420e..0c4450bea8 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -391,7 +391,7 @@ LLVivoxVoiceClient::~LLVivoxVoiceClient()  void LLVivoxVoiceClient::init(LLPumpIO *pump)  {  	// constructor will set up LLVoiceClient::getInstance() -	LLVivoxVoiceClient::getInstance()->mPump = pump; +	mPump = pump;  //     LLCoros::instance().launch("LLVivoxVoiceClient::voiceControlCoro",  //         boost::bind(&LLVivoxVoiceClient::voiceControlCoro, LLVivoxVoiceClient::getInstance())); @@ -419,6 +419,7 @@ void LLVivoxVoiceClient::terminate()  	}      sShuttingDown = true; +    mPump = NULL;  }  //--------------------------------------------------- @@ -953,10 +954,15 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()      llcoro::suspendUntilTimeout(UPDATE_THROTTLE_SECONDS); -    while (!mPump) -    {   // Can't do this until we have the pump available. +    while (!mPump && !sShuttingDown) +    {   // Can't use the pump until we have it available.          llcoro::suspend();      } + +    if (sShuttingDown) +    { +        return false; +    }      // MBW -- Note to self: pumps and pipes examples in      //  indra/test/io.cpp @@ -969,8 +975,10 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()      readChain.push_back(LLIOPipe::ptr_t(new LLIOSocketReader(mSocket)));      readChain.push_back(LLIOPipe::ptr_t(new LLVivoxProtocolParser())); +      mPump->addChain(readChain, NEVER_CHAIN_EXPIRY_SECS); +      //---------------------------------------------------------------------      llcoro::suspendUntilTimeout(UPDATE_THROTTLE_SECONDS); | 
