summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandreykproductengine <andreykproductengine@lindenlab.com>2018-07-04 16:18:08 +0300
committerandreykproductengine <andreykproductengine@lindenlab.com>2018-07-04 16:18:08 +0300
commitc895f8c06282bd3298790113f1305c92d9f268e9 (patch)
tree7777c23f150d6cce07acd95f61ce15613e4adc03
parent5346e7909ff6d462ee3c28504030b33b3e497d0f (diff)
MAINT-8800 Vivox pointlesly stalls for 10 seconds waiting on shutdown
-rw-r--r--indra/newview/llappviewer.cpp10
-rw-r--r--indra/newview/llvoicevivox.cpp28
2 files changed, 26 insertions, 12 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index acec68f393..687b76c224 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1581,6 +1581,11 @@ bool LLAppViewer::doFrame()
saveFinalSnapshot();
}
+ if (LLVoiceClient::instanceExists())
+ {
+ LLVoiceClient::getInstance()->terminate();
+ }
+
delete gServicePump;
destroyMainloopTimeout();
@@ -1680,11 +1685,6 @@ bool LLAppViewer::cleanup()
// Give any remaining SLPlugin instances a chance to exit cleanly.
LLPluginProcessParent::shutdown();
- if (LLVoiceClient::instanceExists())
- {
- LLVoiceClient::getInstance()->terminate();
- }
-
disconnectViewer();
LL_INFOS() << "Viewer disconnected" << LL_ENDL;
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 6a3242b43f..1676f70b1e 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -542,6 +542,10 @@ void LLVivoxVoiceClient::connectorShutdown()
writeString(stream.str());
}
+ else
+ {
+ mShutdownComplete = true;
+ }
}
void LLVivoxVoiceClient::userAuthorized(const std::string& user_id, const LLUUID &agentID)
@@ -1046,16 +1050,25 @@ bool LLVivoxVoiceClient::breakVoiceConnection(bool corowait)
retval = result.has("connector");
}
else
- { // If we are not doing a corowait then we must sleep until the connector has responded
+ {
+ mRelogRequested = false; //stop the control coro
+ // If we are not doing a corowait then we must sleep until the connector has responded
// otherwise we may very well close the socket too early.
#if LL_WINDOWS
- int count = 0;
- while (!mShutdownComplete && 10 > count++)
- { // Rider: This comes out to a max wait time of 10 seconds.
- // The situation that brings us here is a call from ::terminate()
- // and so the viewer is attempting to go away. Don't slow it down
- // longer than this.
+ if (!mShutdownComplete)
+ {
+ // The situation that brings us here is a call from ::terminate()
+ // At this point message system is already down so we can't wait for
+ // the message, yet we need to receive "connector shutdown response".
+ // Either wait a bit and emulate it or check gMessageSystem for specific message
_sleep(1000);
+ if (mConnected)
+ {
+ mConnected = false;
+ LLSD vivoxevent(LLSDMap("connector", LLSD::Boolean(false)));
+ LLEventPumps::instance().post("vivoxClientPump", vivoxevent);
+ }
+ mShutdownComplete = true;
}
#endif
}
@@ -3243,6 +3256,7 @@ void LLVivoxVoiceClient::connectorShutdownResponse(int statusCode, std::string &
}
mConnected = false;
+ mShutdownComplete = true;
LLSD vivoxevent(LLSDMap("connector", LLSD::Boolean(false)));