SL-3704 Plugin exit issues

master
andreykproductengine 2019-07-01 17:28:58 +03:00
parent 8bf2fb0621
commit 23591b8ab7
4 changed files with 20 additions and 2 deletions

View File

@ -33,7 +33,7 @@
#include "llpluginmessagepipe.h"
#include "llpluginmessageclasses.h"
static const F32 GOODBYE_SECONDS = 20.0f;
static const F32 GOODBYE_SECONDS = 12.0f; // Do not set it to be bigger than mPluginLockupTimeout or parent will kill LLPluginProcessChild
static const F32 HEARTBEAT_SECONDS = 1.0f;
static const F32 PLUGIN_IDLE_SECONDS = 1.0f / 100.0f; // Each call to idle will give the plugin this much time.
@ -218,6 +218,11 @@ void LLPluginProcessChild::idle(void)
if (mWaitGoodbye.hasExpired())
{
LL_WARNS() << "Wait for goodbye expired. Advancing to UNLOADED" << LL_ENDL;
if (mInstance != NULL)
{
// Something went wrong, at least make sure plugin will terminate
sendMessageToPlugin(LLPluginMessage("base", "force_exit"));
}
setState(STATE_UNLOADED);
}
break;

View File

@ -246,6 +246,7 @@ void MediaPluginCEF::onRequestExitCallback()
LLPluginMessage message("base", "goodbye");
sendMessage(message);
// Will trigger delete on next staticReceiveMessage()
mDeleteMe = true;
}
@ -442,9 +443,13 @@ void MediaPluginCEF::receiveMessage(const char* message_string)
}
else if (message_name == "cleanup")
{
mVolumeCatcher.setVolume(0);
mVolumeCatcher.setVolume(0); // Hack: masks CEF exit issues
mCEFLib->requestExit();
}
else if (message_name == "force_exit")
{
mDeleteMe = true;
}
else if (message_name == "shm_added")
{
SharedSegmentInfo info;

View File

@ -128,6 +128,10 @@ void mediaPluginExample::receiveMessage(const char* message_string)
mDeleteMe = true;
}
else if (message_name == "force_exit")
{
mDeleteMe = true;
}
else if (message_name == "shm_added")
{
SharedSegmentInfo info;

View File

@ -495,6 +495,10 @@ void MediaPluginLibVLC::receiveMessage(const char* message_string)
{
resetVLC();
}
else if (message_name == "force_exit")
{
mDeleteMe = true;
}
else if (message_name == "shm_added")
{
SharedSegmentInfo info;