Index: /trunk/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp	(revision 19922)
+++ /trunk/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp	(revision 19923)
@@ -48,4 +48,5 @@
 static PSUPDRVSESSION   g_pSession;
 static RTTEST           g_hTest;
+static uint32_t         g_cMillies; /* Used by the interruptible tests. */
 
 
@@ -55,5 +56,5 @@
     SUPSEMEVENT hEvent = (SUPSEMEVENT)pvUser;
     RTThreadUserSignal(hSelf);
-    return SUPSemEventWaitNoResume(g_pSession, hEvent, RT_INDEFINITE_WAIT);
+    return SUPSemEventWaitNoResume(g_pSession, hEvent, g_cMillies);
 }
 
@@ -63,5 +64,5 @@
     SUPSEMEVENTMULTI hEventMulti = (SUPSEMEVENTMULTI)pvUser;
     RTThreadUserSignal(hSelf);
-    return SUPSemEventMultiWaitNoResume(g_pSession, hEventMulti, RT_INDEFINITE_WAIT);
+    return SUPSemEventMultiWaitNoResume(g_pSession, hEventMulti, g_cMillies);
 }
 
@@ -142,4 +143,5 @@
     RTTestSub(hTest, "SRE Interruptibility");
     RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS);
+    g_cMillies = RT_INDEFINITE_WAIT;
     RTTHREAD hThread = NIL_RTTHREAD;
     RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemInterruptibleSRE, (void *)hEvent, 0, RTTHREADTYPE_TIMER, RTTHREADFLAGS_WAITABLE, "IntSRE"), VINF_SUCCESS);
@@ -152,6 +154,20 @@
     RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED);
 
+    RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS);
+    g_cMillies = 120*1000;
+    hThread = NIL_RTTHREAD;
+    RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemInterruptibleSRE, (void *)hEvent, 0, RTTHREADTYPE_TIMER, RTTHREADFLAGS_WAITABLE, "IntSRE"), VINF_SUCCESS);
+    RTTESTI_CHECK_RC(RTThreadUserWait(hThread, 60*1000), VINF_SUCCESS);
+    RTThreadSleep(120);
+    RTThreadPoke(hThread);
+    rcThread = VINF_SUCCESS;
+    RTTESTI_CHECK_RC(RTThreadWait(hThread, 60*1000, &rcThread), VINF_SUCCESS);
+    RTTESTI_CHECK_RC(rcThread, VERR_INTERRUPTED);
+    RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED);
+
+
     RTTestSub(hTest, "MRE Interruptibility");
     RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEventMulti), VINF_SUCCESS);
+    g_cMillies = RT_INDEFINITE_WAIT;
     hThread = NIL_RTTHREAD;
     RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemInterruptibleMRE, (void *)hEventMulti, 0, RTTHREADTYPE_TIMER, RTTHREADFLAGS_WAITABLE, "IntMRE"), VINF_SUCCESS);
@@ -164,5 +180,16 @@
     RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEventMulti), VINF_OBJECT_DESTROYED);
 
-#endif
+    RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEventMulti), VINF_SUCCESS);
+    g_cMillies = 120*1000;
+    hThread = NIL_RTTHREAD;
+    RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemInterruptibleMRE, (void *)hEventMulti, 0, RTTHREADTYPE_TIMER, RTTHREADFLAGS_WAITABLE, "IntMRE"), VINF_SUCCESS);
+    RTTESTI_CHECK_RC(RTThreadUserWait(hThread, 60*1000), VINF_SUCCESS);
+    RTThreadSleep(120);
+    RTThreadPoke(hThread);
+    rcThread = VINF_SUCCESS;
+    RTTESTI_CHECK_RC(RTThreadWait(hThread, 60*1000, &rcThread), VINF_SUCCESS);
+    RTTESTI_CHECK_RC(rcThread, VERR_INTERRUPTED);
+    RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEventMulti), VINF_OBJECT_DESTROYED);
+#endif /* !OS2 && !WINDOWS */
 
     /*
