Index: /trunk/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.cpp
===================================================================
--- /trunk/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.cpp	(revision 54740)
+++ /trunk/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.cpp	(revision 54741)
@@ -461,20 +461,23 @@
 {
     syncEnter();
-    m->fShutdown = true;
-    if (m->m_hThrRecv != NIL_RTTHREAD)
-    {
-        int rc = abortWait();
-        AssertRC(rc == VINF_SUCCESS || rc == VERR_SEM_DESTROYED);
-        rc = m->m_EventQ->interruptEventQueueProcessing();
-        if (RT_SUCCESS(rc))
+    if (!m->fShutdown)
+    {
+        m->fShutdown = true;
+        if (m->m_hThrRecv != NIL_RTTHREAD)
         {
-            rc = RTThreadWait(m->m_hThrRecv, 60000, NULL);
-            if (RT_FAILURE(rc))
-                LogWarningFunc(("RTThreadWait(%RTthrd) -> %Rrc\n", m->m_hThrRecv, rc));
-        }
-        else
-        {
-            AssertMsgFailed(("interruptEventQueueProcessing() failed\n"));
-            RTThreadWait(m->m_hThrRecv , 0, NULL);
+            int rc = abortWait();
+            AssertRC(rc == VINF_SUCCESS || rc == VERR_SEM_DESTROYED);
+            rc = m->m_EventQ->interruptEventQueueProcessing();
+            if (RT_SUCCESS(rc))
+            {
+                rc = RTThreadWait(m->m_hThrRecv, 60000, NULL);
+                if (RT_FAILURE(rc))
+                    LogWarningFunc(("RTThreadWait(%RTthrd) -> %Rrc\n", m->m_hThrRecv, rc));
+            }
+            else
+            {
+                AssertMsgFailed(("interruptEventQueueProcessing() failed\n"));
+                RTThreadWait(m->m_hThrRecv , 0, NULL);
+            }
         }
     }
