Changeset 19895 in vbox for trunk/src/VBox/HostDrivers/Support
- Timestamp:
- May 21, 2009 3:58:48 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 47590
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp
r19892 r19895 36 36 37 37 #include <VBox/param.h> 38 #include <iprt/err.h> 38 39 #include <iprt/initterm.h> 40 #include <iprt/stream.h> 39 41 #include <iprt/test.h> 40 #include <iprt/stream.h> 41 #include <iprt/string.h> 42 #include <iprt/thread.h> 43 44 45 /******************************************************************************* 46 * Structures and Typedefs * 47 *******************************************************************************/ 48 static PSUPDRVSESSION g_pSession; 49 static RTTEST g_hTest; 50 51 52 53 static DECLCALLBACK(int) tstSupSemInterruptibleSRE(RTTHREAD hSelf, void *pvUser) 54 { 55 SUPSEMEVENT hEvent = (SUPSEMEVENT)pvUser; 56 RTThreadUserSignal(hSelf); 57 return SUPSemEventWaitNoResume(g_pSession, hEvent, RT_INDEFINITE_WAIT); 58 } 59 60 61 static DECLCALLBACK(int) tstSupSemInterruptibleMRE(RTTHREAD hSelf, void *pvUser) 62 { 63 SUPSEMEVENTMULTI hEventMulti = (SUPSEMEVENTMULTI)pvUser; 64 RTThreadUserSignal(hSelf); 65 return SUPSemEventMultiWaitNoResume(g_pSession, hEventMulti, RT_INDEFINITE_WAIT); 66 } 42 67 43 68 … … 53 78 return 1; 54 79 } 80 55 81 RTTEST hTest; 56 82 rc = RTTestCreate("tstSupSem", &hTest); … … 60 86 return 1; 61 87 } 88 g_hTest = hTest; 89 62 90 PSUPDRVSESSION pSession; 63 91 rc = SUPR3Init(&pSession); … … 67 95 return RTTestSummaryAndDestroy(hTest); 68 96 } 97 g_pSession = pSession; 69 98 70 99 /* 71 100 * Basic API checks. 72 101 */ 73 RTTestSub(hTest, "Single Release Event API");102 RTTestSub(hTest, "Single Release Event (SRE) API"); 74 103 SUPSEMEVENT hEvent = NIL_SUPSEMEVENT; 75 104 RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS); … … 89 118 RTTESTI_CHECK_RC(SUPSemEventClose(pSession, NIL_SUPSEMEVENT), VINF_SUCCESS); 90 119 91 RTTestSub(hTest, "Multiple Release Event API");120 RTTestSub(hTest, "Multiple Release Event (MRE) API"); 92 121 SUPSEMEVENTMULTI hEventMulti = NIL_SUPSEMEVENT; 93 122 RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEventMulti), VINF_SUCCESS); … … 110 139 RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, NIL_SUPSEMEVENTMULTI), VINF_SUCCESS); 111 140 141 #if !defined(RT_OS_OS2) && !defined(RT_OS_WINDOWS) 142 RTTestSub(hTest, "SRE Interruptibility"); 143 RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS); 144 RTTHREAD hThread = NIL_RTTHREAD; 145 RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemInterruptibleSRE, (void *)hEvent, 0, RTTHREADTYPE_TIMER, RTTHREADFLAGS_WAITABLE, "IntSRE"), VINF_SUCCESS); 146 RTTESTI_CHECK_RC(RTThreadUserWait(hThread, 60*1000), VINF_SUCCESS); 147 RTThreadSleep(120); 148 RTThreadPoke(hThread); 149 int rcThread = VINF_SUCCESS; 150 RTTESTI_CHECK_RC(RTThreadWait(hThread, 60*1000, &rcThread), VINF_SUCCESS); 151 RTTESTI_CHECK_RC(rcThread, VERR_INTERRUPTED); 152 RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED); 153 154 RTTestSub(hTest, "MRE Interruptibility"); 155 RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEventMulti), VINF_SUCCESS); 156 hThread = NIL_RTTHREAD; 157 RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemInterruptibleMRE, (void *)hEventMulti, 0, RTTHREADTYPE_TIMER, RTTHREADFLAGS_WAITABLE, "IntMRE"), VINF_SUCCESS); 158 RTTESTI_CHECK_RC(RTThreadUserWait(hThread, 60*1000), VINF_SUCCESS); 159 RTThreadSleep(120); 160 RTThreadPoke(hThread); 161 rcThread = VINF_SUCCESS; 162 RTTESTI_CHECK_RC(RTThreadWait(hThread, 60*1000, &rcThread), VINF_SUCCESS); 163 RTTESTI_CHECK_RC(rcThread, VERR_INTERRUPTED); 164 RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEventMulti), VINF_OBJECT_DESTROYED); 165 166 #endif 167 112 168 /* 113 169 * Done.
Note:
See TracChangeset
for help on using the changeset viewer.