diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp
index eb6cb1b503a00778e37bbb22853aa5ecf0659b39..7d18bae94705ca14d491cf4660b8e93a16effa95 100644
--- a/indra/llplugin/llpluginprocessparent.cpp
+++ b/indra/llplugin/llpluginprocessparent.cpp
@@ -152,8 +152,18 @@ void LLPluginProcessParent::shutdown()
     mapInstances_t::iterator it;
     for (it = sInstances.begin(); it != sInstances.end(); ++it)
     {
-        (*it).second->setState(STATE_GOODBYE);
-        (*it).second->idle();
+        EState state = (*it).second->mState;
+        if (state != STATE_CLEANUP
+            || state != STATE_EXITING
+            || state != STATE_DONE
+            || state != STATE_ERROR)
+        {
+            (*it).second->setState(STATE_GOODBYE);
+        }
+        if (state != STATE_DONE)
+        {
+            (*it).second->idle();
+        }
     }
     sInstances.clear();
 }