Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp	(revision 29632)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp	(revision 29633)
@@ -363,5 +363,5 @@
             VBoxServiceVerbose(1, "Main service '%s' successfully stopped.\n", g_aServices[iMain].pDesc->pszName);
         else /* Only complain if service returned an error. Otherwise the service is a one-timer. */
-            VBoxServiceError("Service '%s' stopped unexpected; rc=%Rrc\n", g_aServices[iMain].pDesc->pszName, rc);           
+            VBoxServiceError("Service '%s' stopped unexpected; rc=%Rrc\n", g_aServices[iMain].pDesc->pszName, rc);
         g_aServices[iMain].pDesc->pfnTerm();
     }
@@ -419,6 +419,6 @@
 
 #ifdef RT_OS_WINDOWS
-    /* 
-     * As we're now done terminating all service threads, 
+    /*
+     * As we're now done terminating all service threads,
      * we have to stop the main thread as well (if defined). Note that the termination
      * function will be called in a later context (when the main thread returns from the worker
@@ -430,8 +430,8 @@
 
         ASMAtomicXchgBool(&g_fShutdown, true);
-        g_aServices[iMain].pDesc->pfnStop();                      
-    }
-#endif
-    
+        g_aServices[iMain].pDesc->pfnStop();
+    }
+#endif
+
     VBoxServiceVerbose(2, "Stopping services returned: rc=%Rrc\n", rc);
     return rc;
@@ -454,6 +454,12 @@
     sigaddset(&signalMask, SIGTERM);
     pthread_sigmask(SIG_BLOCK, &signalMask, NULL);
-    sigwait(&signalMask, &iSignal);
-    VBoxServiceVerbose(3, "VBoxServiceWaitSignal: Received signal %d\n", iSignal);
+
+    do
+        iSignal = -1;
+    while (   sigwait(&signalMask, &iSignal) == -1
+           && (   errno == EINTR
+               || errno == ERESTART));
+
+    VBoxServiceVerbose(3, "VBoxServiceWaitSignal: Received signal %d (errno=%d)\n", iSignal, errno);
 }
 #endif /* !RT_OS_WINDOWS */
