Index: /trunk/src/VBox/Runtime/r3/win/semevent-win.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/win/semevent-win.cpp	(revision 25658)
+++ /trunk/src/VBox/Runtime/r3/win/semevent-win.cpp	(revision 25659)
@@ -164,35 +164,7 @@
 
 
-RTDECL(int)   RTSemEventWaitNoResume(RTSEMEVENT EventSem, unsigned cMillies)
-{
-    PCRTLOCKVALSRCPOS pSrcPos = NULL;
-
-    /*
-     * Validate input.
-     */
-    struct RTSEMEVENTINTERNAL *pThis = EventSem;
-    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
-    AssertReturn(pThis->u32Magic == RTSEMEVENT_MAGIC, VERR_INVALID_HANDLE);
-
-    /*
-     * Wait for condition.
-     */
-#ifdef RTSEMEVENT_STRICT
-    RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt();
-    if (pThis->fEverHadSignallers)
-    {
-        int rc9 = RTLockValidatorRecSharedCheckBlocking(&pThis->Signallers, hThreadSelf, pSrcPos, false,
-                                                        RTTHREADSTATE_EVENT, true);
-        if (RT_FAILURE(rc9))
-            return rc9;
-    }
-#else
-    RTTHREAD hThreadSelf = RTThreadSelf();
-#endif
-    RTThreadBlocking(hThreadSelf, RTTHREADSTATE_EVENT, true);
-    DWORD rc = WaitForSingleObjectEx(pThis->hev,
-                                     cMillies == RT_INDEFINITE_WAIT ? INFINITE : cMillies,
-                                     TRUE /*fAlertable*/);
-    RTThreadUnblocked(hThreadSelf, RTTHREADSTATE_EVENT);
+/** Goto avoidance. */
+DECL_FORCE_INLINE(int) rtSemEventWaitHandleStatus(struct RTSEMEVENTINTERNAL *pThis, DWORD rc)
+{
     switch (rc)
     {
@@ -217,4 +189,44 @@
 
 
+RTDECL(int)   RTSemEventWaitNoResume(RTSEMEVENT EventSem, unsigned cMillies)
+{
+    PCRTLOCKVALSRCPOS pSrcPos = NULL;
+
+    /*
+     * Validate input.
+     */
+    struct RTSEMEVENTINTERNAL *pThis = EventSem;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTSEMEVENT_MAGIC, VERR_INVALID_HANDLE);
+
+    /*
+     * Wait for condition.
+     */
+#ifdef RTSEMEVENT_STRICT
+    RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt();
+    if (pThis->fEverHadSignallers)
+    {
+        DWORD rc = WaitForSingleObjectEx(pThis->hev,
+                                         0 /*Timeout*/,
+                                         TRUE /*fAlertable*/);
+        if (rc != WAIT_TIMEOUT || cMillies == 0)
+            return rtSemEventWaitHandleStatus(pThis, rc);
+        int rc9 = RTLockValidatorRecSharedCheckBlocking(&pThis->Signallers, hThreadSelf, pSrcPos, false,
+                                                        RTTHREADSTATE_EVENT, true);
+        if (RT_FAILURE(rc9))
+            return rc9;
+    }
+#else
+    RTTHREAD hThreadSelf = RTThreadSelf();
+#endif
+    RTThreadBlocking(hThreadSelf, RTTHREADSTATE_EVENT, true);
+    DWORD rc = WaitForSingleObjectEx(pThis->hev,
+                                     cMillies == RT_INDEFINITE_WAIT ? INFINITE : cMillies,
+                                     TRUE /*fAlertable*/);
+    RTThreadUnblocked(hThreadSelf, RTTHREADSTATE_EVENT);
+    return rtSemEventWaitHandleStatus(pThis, rc);
+}
+
+
 RTDECL(void) RTSemEventSetSignaller(RTSEMEVENT hEventSem, RTTHREAD hThread)
 {
Index: /trunk/src/VBox/Runtime/r3/win/semeventmulti-win.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/win/semeventmulti-win.cpp	(revision 25658)
+++ /trunk/src/VBox/Runtime/r3/win/semeventmulti-win.cpp	(revision 25659)
@@ -187,35 +187,7 @@
 
 
-RTDECL(int)  RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies)
-{
-    PCRTLOCKVALSRCPOS pSrcPos = NULL;
-
-    /*
-     * Validate input.
-     */
-    struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;
-    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
-    AssertReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, VERR_INVALID_HANDLE);
-
-    /*
-     * Wait for condition.
-     */
-#ifdef RTSEMEVENT_STRICT
-    RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt();
-    if (pThis->fEverHadSignallers)
-    {
-        int rc9 = RTLockValidatorRecSharedCheckBlocking(&pThis->Signallers, hThreadSelf, pSrcPos, false,
-                                                        RTTHREADSTATE_EVENT_MULTI, true);
-        if (RT_FAILURE(rc9))
-            return rc9;
-    }
-#else
-    RTTHREAD hThreadSelf = RTThreadSelf();
-#endif
-    RTThreadBlocking(hThreadSelf, RTTHREADSTATE_EVENT_MULTI, true);
-    DWORD rc = WaitForSingleObjectEx(pThis->hev,
-                                     cMillies == RT_INDEFINITE_WAIT ? INFINITE : cMillies,
-                                     TRUE /*fAlertable*/);
-    RTThreadUnblocked(hThreadSelf, RTTHREADSTATE_EVENT_MULTI);
+/** Goto avoidance. */
+DECL_FORCE_INLINE(int) rtSemEventWaitHandleStatus(struct RTSEMEVENTMULTIINTERNAL *pThis, DWORD rc)
+{
     switch (rc)
     {
@@ -240,4 +212,44 @@
 
 
+RTDECL(int)  RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies)
+{
+    PCRTLOCKVALSRCPOS pSrcPos = NULL;
+
+    /*
+     * Validate input.
+     */
+    struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, VERR_INVALID_HANDLE);
+
+    /*
+     * Wait for condition.
+     */
+#ifdef RTSEMEVENT_STRICT
+    RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt();
+    if (pThis->fEverHadSignallers)
+    {
+        DWORD rc = WaitForSingleObjectEx(pThis->hev,
+                                         0 /*Timeout*/,
+                                         TRUE /*fAlertable*/);
+        if (rc != WAIT_TIMEOUT || cMillies == 0)
+            return rtSemEventWaitHandleStatus(pThis, rc);
+        int rc9 = RTLockValidatorRecSharedCheckBlocking(&pThis->Signallers, hThreadSelf, pSrcPos, false,
+                                                        RTTHREADSTATE_EVENT_MULTI, true);
+        if (RT_FAILURE(rc9))
+            return rc9;
+    }
+#else
+    RTTHREAD hThreadSelf = RTThreadSelf();
+#endif
+    RTThreadBlocking(hThreadSelf, RTTHREADSTATE_EVENT_MULTI, true);
+    DWORD rc = WaitForSingleObjectEx(pThis->hev,
+                                     cMillies == RT_INDEFINITE_WAIT ? INFINITE : cMillies,
+                                     TRUE /*fAlertable*/);
+    RTThreadUnblocked(hThreadSelf, RTTHREADSTATE_EVENT_MULTI);
+    return rtSemEventWaitHandleStatus(pThis, rc);
+}
+
+
 RTDECL(void) RTSemEventMultiSetSignaller(RTSEMEVENTMULTI hEventMultiSem, RTTHREAD hThread)
 {
