Index: /trunk/src/VBox/Runtime/testcase/tstIprtList.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstIprtList.cpp	(revision 86625)
+++ /trunk/src/VBox/Runtime/testcase/tstIprtList.cpp	(revision 86626)
@@ -490,4 +490,6 @@
 #define MTTEST_ITEMS_NOT_REMOVED    100
 
+static RTSEMEVENTMULTI g_hEvtMtTest = NIL_RTSEMEVENTMULTI;
+
 /**
  * Thread for prepending items to a shared list.
@@ -500,4 +502,5 @@
     MTTEST_LIST_TYPE<MTTEST_TYPE> *pTestList = (MTTEST_LIST_TYPE<MTTEST_TYPE> *)pvUser;
     RT_NOREF_PV(hSelf);
+    RTSemEventMultiWait(g_hEvtMtTest, RT_MS_1MIN);
 
     /* Prepend new items at the start of the list. */
@@ -518,4 +521,5 @@
     MTTEST_LIST_TYPE<MTTEST_TYPE> *pTestList = (MTTEST_LIST_TYPE<MTTEST_TYPE> *)pvUser;
     RT_NOREF_PV(hSelf);
+    RTSemEventMultiWait(g_hEvtMtTest, RT_MS_1MIN);
 
     /* Append new items at the end of the list. */
@@ -531,7 +535,13 @@
     uint32_t cItems = (uint32_t)pTestList->size();
     if (cItems > MTTEST_ITEMS)
+    {
         cItems -= MTTEST_ITEMS;
-    if (cItems < MTTEST_ITEMS_NOT_REMOVED)
+        if (cItems < MTTEST_ITEMS_NOT_REMOVED)
+            cItems = MTTEST_ITEMS_NOT_REMOVED;
+    }
+    else if (cItems > MTTEST_ITEMS_NOT_REMOVED)
         cItems = MTTEST_ITEMS_NOT_REMOVED;
+    else if (cItems <= 1)
+        return 0;
     return RTRandU32Ex(0, cItems - 1);
 }
@@ -547,4 +557,5 @@
     MTTEST_LIST_TYPE<MTTEST_TYPE> *pTestList = (MTTEST_LIST_TYPE<MTTEST_TYPE> *)pvUser;
     RT_NOREF_PV(hSelf);
+    RTSemEventMultiWait(g_hEvtMtTest, RT_MS_1MIN);
 
     /* Insert new items in the middle of the list. */
@@ -565,4 +576,5 @@
     MTTEST_LIST_TYPE<MTTEST_TYPE> *pTestList = (MTTEST_LIST_TYPE<MTTEST_TYPE> *)pvUser;
     RT_NOREF_PV(hSelf);
+    RTSemEventMultiWait(g_hEvtMtTest, RT_MS_1MIN);
 
     MTTEST_TYPE a;
@@ -589,4 +601,5 @@
     MTTEST_LIST_TYPE<MTTEST_TYPE> *pTestList = (MTTEST_LIST_TYPE<MTTEST_TYPE> *)pvUser;
     RT_NOREF_PV(hSelf);
+    RTSemEventMultiWait(g_hEvtMtTest, RT_MS_1MIN);
 
     /* Try to replace C items from random places. */
@@ -612,4 +625,5 @@
     MTTEST_LIST_TYPE<MTTEST_TYPE> *pTestList = (MTTEST_LIST_TYPE<MTTEST_TYPE> *)pvUser;
     RT_NOREF_PV(hSelf);
+    RTSemEventMultiWait(g_hEvtMtTest, RT_MS_1MIN);
 
     /* Try to delete items from random places. */
@@ -641,4 +655,6 @@
     };
 
+    RTTESTI_CHECK_RC_RETV(RTSemEventMultiCreate(&g_hEvtMtTest), VINF_SUCCESS);
+
     for (unsigned i = 0; i < RT_ELEMENTS(ahThreads); i++)
     {
@@ -647,5 +663,6 @@
     }
 
-    uint64_t tsMsDeadline = RTTimeMilliTS() + 60000;
+    RTTESTI_CHECK_RC(RTSemEventMultiSignal(g_hEvtMtTest), VINF_SUCCESS);
+    uint64_t tsMsDeadline = RTTimeMilliTS() + RT_MS_1MIN;
     for (unsigned i = 0; i < RT_ELEMENTS(ahThreads); i++)
     {
@@ -654,4 +671,6 @@
         RTTESTI_CHECK_RC(RTThreadWait(ahThreads[i], cWait, NULL), VINF_SUCCESS);
     }
+    RTTESTI_CHECK_RC(RTSemEventMultiDestroy(g_hEvtMtTest), VINF_SUCCESS);
+    g_hEvtMtTest = NIL_RTSEMEVENTMULTI;
 
     RTTESTI_CHECK_RETV(testList.size() == MTTEST_ITEMS * 2);
