- Timestamp:
- Mar 21, 2013 3:41:17 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 84433
- Location:
- trunk/src/VBox/Runtime/testcase
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/Makefile.kmk
r44528 r45131 51 51 tstRTCidr \ 52 52 tstRTCritSect \ 53 tstRTCritSectRw \ 53 54 tstRTCType \ 54 55 tstRTDigest \ … … 217 218 tstRTCritSect_SOURCES = tstRTCritSect.cpp 218 219 220 tstRTCritSectRw_TEMPLATE = VBOXR3TSTEXE 221 tstRTCritSectRw_SOURCES = tstRTCritSectRw.cpp 222 219 223 tstRTCritSectW32_TEMPLATE = VBOXR3TSTEXE 220 224 tstRTCritSectW32_SOURCES = tstRTCritSect.cpp -
trunk/src/VBox/Runtime/testcase/tstRTCritSectRw.cpp
r45124 r45131 1 1 /* $Id$ */ 2 2 /** @file 3 * IPRT Testcase - Reader/Writer Semaphore.3 * IPRT Testcase - Reader/Writer Critical Sections. 4 4 */ 5 5 6 6 /* 7 * Copyright (C) 2009-201 0Oracle Corporation7 * Copyright (C) 2009-2013 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 28 28 * Header Files * 29 29 *******************************************************************************/ 30 #include <iprt/ semaphore.h>30 #include <iprt/critsect.h> 31 31 32 32 #include <iprt/asm.h> … … 36 36 #include <iprt/lockvalidator.h> 37 37 #include <iprt/rand.h> 38 #include <iprt/semaphore.h> 38 39 #include <iprt/string.h> 39 40 #include <iprt/stream.h> … … 47 48 *******************************************************************************/ 48 49 static RTTEST g_hTest; 49 static RT SEMRW g_hSemRW = NIL_RTSEMRW;50 static RTCRITSECTRW g_CritSectRw; 50 51 static bool volatile g_fTerminate; 51 52 static bool g_fYield; … … 85 86 for (unsigned i = 0; i <= writerec; i++) 86 87 { 87 rc = RT SemRWRequestWriteNoResume(g_hSemRW, RT_INDEFINITE_WAIT);88 rc = RTCritSectRwEnterExcl(&g_CritSectRw); 88 89 if (RT_FAILURE(rc)) 89 90 { … … 109 110 else 110 111 { 111 rc = RT SemRWRequestReadNoResume(g_hSemRW, RT_INDEFINITE_WAIT);112 rc = RTCritSectRwEnterShared(&g_CritSectRw); 112 113 if (RT_FAILURE(rc)) 113 114 { … … 125 126 for (unsigned i = 0; i < readrec; i++) 126 127 { 127 rc = RT SemRWRequestReadNoResume(g_hSemRW, RT_INDEFINITE_WAIT);128 rc = RTCritSectRwEnterShared(&g_CritSectRw); 128 129 if (RT_FAILURE(rc)) 129 130 { … … 149 150 for (unsigned i = 0; i < readrec; i++) 150 151 { 151 rc = RT SemRWReleaseRead(g_hSemRW);152 rc = RTCritSectRwLeaveShared(&g_CritSectRw); 152 153 if (RT_FAILURE(rc)) 153 154 { … … 175 176 for (unsigned i = 0; i <= writerec; i++) 176 177 { 177 rc = RT SemRWReleaseWrite(g_hSemRW);178 rc = RTCritSectRwLeaveExcl(&g_CritSectRw); 178 179 if (RT_FAILURE(rc)) 179 180 { … … 192 193 } 193 194 ASMAtomicDecU32(&g_cConcurrentReaders); 194 rc = RT SemRWReleaseRead(g_hSemRW);195 rc = RTCritSectRwLeaveShared(&g_CritSectRw); 195 196 if (RT_FAILURE(rc)) 196 197 { … … 233 234 g_cConcurrentReaders = 0; 234 235 235 RTTEST_CHECK_RC_RETV(g_hTest, RT SemRWCreate(&g_hSemRW), VINF_SUCCESS);236 RTTEST_CHECK_RC_RETV(g_hTest, RTCritSectRwInit(&g_CritSectRw), VINF_SUCCESS); 236 237 237 238 /* 238 239 * Create the threads and let them block on the semrw. 239 240 */ 240 RTTEST_CHECK_RC_RETV(g_hTest, RT SemRWRequestWrite(g_hSemRW, RT_INDEFINITE_WAIT), VINF_SUCCESS);241 RTTEST_CHECK_RC_RETV(g_hTest, RTCritSectRwEnterExcl(&g_CritSectRw), VINF_SUCCESS); 241 242 242 243 for (i = 0; i < cThreads; i++) … … 253 254 uint32_t cErrorsBefore = RTTestErrorCount(g_hTest); 254 255 uint64_t u64StartTS = RTTimeNanoTS(); 255 RTTEST_CHECK_RC(g_hTest, RT SemRWReleaseWrite(g_hSemRW), VINF_SUCCESS);256 RTTEST_CHECK_RC(g_hTest, RTCritSectRwLeaveExcl(&g_CritSectRw), VINF_SUCCESS); 256 257 RTThreadSleep(cSeconds * 1000); 257 258 ASMAtomicWriteBool(&g_fTerminate, true); … … 267 268 RTTEST_CHECK_MSG(g_hTest, g_cConcurrentReaders == 0, (g_hTest, "g_cConcurrentReaders=%u at end of test\n", g_cConcurrentReaders)); 268 269 269 RTTEST_CHECK_RC(g_hTest, RTSemRWDestroy(g_hSemRW), VINF_SUCCESS); 270 g_hSemRW = NIL_RTSEMRW; 270 RTTEST_CHECK_RC(g_hTest, RTCritSectRwDelete(&g_CritSectRw), VINF_SUCCESS); 271 271 272 272 if (RTTestErrorCount(g_hTest) != cErrorsBefore) … … 312 312 313 313 314 static DECLCALLBACK(int) Test2Thread(RTTHREAD hThreadSelf, void *pvUser) 315 { 316 RTSEMRW hSemRW = (RTSEMRW)pvUser; 317 318 RTTEST_CHECK_RC(g_hTest, RTSemRWRequestRead(hSemRW, 0), VERR_TIMEOUT); 319 RTTEST_CHECK_RC(g_hTest, RTSemRWRequestWrite(hSemRW, 0), VERR_TIMEOUT); 320 321 RTTEST_CHECK_RC(g_hTest, RTSemRWRequestRead(hSemRW, 1), VERR_TIMEOUT); 322 RTTEST_CHECK_RC(g_hTest, RTSemRWRequestWrite(hSemRW, 1), VERR_TIMEOUT); 323 324 RTTEST_CHECK_RC(g_hTest, RTSemRWRequestRead(hSemRW, 50), VERR_TIMEOUT); 325 RTTEST_CHECK_RC(g_hTest, RTSemRWRequestWrite(hSemRW, 50), VERR_TIMEOUT); 326 327 return VINF_SUCCESS; 328 } 329 330 331 static void Test3(void) 314 static void TestNegative(void) 332 315 { 333 316 RTTestSub(g_hTest, "Negative"); … … 336 319 bool fSavedLckValEnabled = RTLockValidatorSetEnabled(false); 337 320 338 RT SEMRW hSemRW;339 RTTEST_CHECK_RC_RETV(g_hTest, RT SemRWCreate(&hSemRW), VINF_SUCCESS);340 341 RTTEST_CHECK_RC(g_hTest, RT SemRWReleaseRead(hSemRW), VERR_NOT_OWNER);342 RTTEST_CHECK_RC(g_hTest, RT SemRWReleaseWrite(hSemRW), VERR_NOT_OWNER);343 344 RTTEST_CHECK_RC(g_hTest, RT SemRWRequestWrite(hSemRW, RT_INDEFINITE_WAIT), VINF_SUCCESS);345 RTTEST_CHECK_RC(g_hTest, RT SemRWReleaseRead(hSemRW), VERR_NOT_OWNER);346 347 RTTEST_CHECK_RC(g_hTest, RT SemRWRequestRead(hSemRW, RT_INDEFINITE_WAIT), VINF_SUCCESS);348 RTTEST_CHECK_RC(g_hTest, RT SemRWReleaseWrite(hSemRW), VERR_WRONG_ORDER); /* cannot release the final write before the reads. */349 RTTEST_CHECK_RC(g_hTest, RT SemRWReleaseRead(hSemRW), VINF_SUCCESS);350 RTTEST_CHECK_RC(g_hTest, RT SemRWReleaseWrite(hSemRW), VINF_SUCCESS);351 352 RTTEST_CHECK_RC(g_hTest, RT SemRWDestroy(hSemRW), VINF_SUCCESS);321 RTCRITSECTRW CritSectRw; 322 RTTEST_CHECK_RC_RETV(g_hTest, RTCritSectRwInit(&CritSectRw), VINF_SUCCESS); 323 324 RTTEST_CHECK_RC(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VERR_NOT_OWNER); 325 RTTEST_CHECK_RC(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VERR_NOT_OWNER); 326 327 RTTEST_CHECK_RC(g_hTest, RTCritSectRwEnterExcl(&CritSectRw), VINF_SUCCESS); 328 RTTEST_CHECK_RC(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VERR_NOT_OWNER); 329 330 RTTEST_CHECK_RC(g_hTest, RTCritSectRwEnterShared(&CritSectRw), VINF_SUCCESS); 331 RTTEST_CHECK_RC(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VERR_WRONG_ORDER); /* cannot release the final write before the reads. */ 332 RTTEST_CHECK_RC(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS); 333 RTTEST_CHECK_RC(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS); 334 335 RTTEST_CHECK_RC(g_hTest, RTCritSectRwDelete(&CritSectRw), VINF_SUCCESS); 353 336 354 337 RTLockValidatorSetEnabled(fSavedLckValEnabled); … … 357 340 } 358 341 359 static void Test2(void)360 {361 RTTestSub(g_hTest, "Timeout");362 363 RTSEMRW hSemRW = NIL_RTSEMRW;364 RTTEST_CHECK_RC_RETV(g_hTest, RTSemRWCreate(&hSemRW), VINF_SUCCESS);365 366 /* Lock it for writing and let the thread do the remainder of the test. */367 RTTEST_CHECK_RC_RETV(g_hTest, RTSemRWRequestWrite(hSemRW, RT_INDEFINITE_WAIT), VINF_SUCCESS);368 369 RTTHREAD hThread;370 RTTEST_CHECK_RC_RETV(g_hTest, RTThreadCreate(&hThread, Test2Thread, hSemRW, 0,371 RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "test2"),372 VINF_SUCCESS);373 RTTEST_CHECK_RC(g_hTest, RTThreadWait(hThread, 15000, NULL), VINF_SUCCESS);374 RTTEST_CHECK_RC(g_hTest, RTSemRWReleaseWrite(hSemRW), VINF_SUCCESS);375 376 RTTEST_CHECK_RC(g_hTest, RTSemRWDestroy(hSemRW), VINF_SUCCESS);377 }378 379 342 380 343 static bool Test1(void) … … 382 345 RTTestSub(g_hTest, "Basics"); 383 346 384 RTSEMRW hSemRW = NIL_RTSEMRW; 385 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWCreate(&hSemRW), VINF_SUCCESS, false); 386 RTTEST_CHECK_RET(g_hTest, hSemRW != NIL_RTSEMRW, false); 387 388 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestRead(hSemRW, RT_INDEFINITE_WAIT), VINF_SUCCESS, false); 389 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseRead(hSemRW), VINF_SUCCESS, false); 390 391 for (unsigned cMs = 0; cMs < 50; cMs++) 347 RTCRITSECTRW CritSectRw; 348 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwInit(&CritSectRw), VINF_SUCCESS, false); 349 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsInitialized(&CritSectRw), false); 350 351 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterShared(&CritSectRw), VINF_SUCCESS, false); 352 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS, false); 353 354 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterShared(&CritSectRw), VINF_SUCCESS, false); 355 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterShared(&CritSectRw), VINF_SUCCESS, false); 356 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS, false); 357 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS, false); 358 359 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterExcl(&CritSectRw), VINF_SUCCESS, false); 360 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 361 362 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterExcl(&CritSectRw), VINF_SUCCESS, false); 363 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterExcl(&CritSectRw), VINF_SUCCESS, false); 364 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 365 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 366 367 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterExcl(&CritSectRw), VINF_SUCCESS, false); 368 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterShared(&CritSectRw), VINF_SUCCESS, false); 369 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS, false); 370 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 371 372 for (int iRun = 0; iRun < 3; iRun++) 392 373 { 393 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestRead(hSemRW, cMs), VINF_SUCCESS, false); 394 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestRead(hSemRW, cMs), VINF_SUCCESS, false); 395 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseRead(hSemRW), VINF_SUCCESS, false); 396 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseRead(hSemRW), VINF_SUCCESS, false); 374 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterExcl(&CritSectRw), VINF_SUCCESS, false); 375 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriteRecursion(&CritSectRw) == 1, false); 376 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriterReadRecursion(&CritSectRw) == 0, false); 377 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsWriteOwner(&CritSectRw) == true, false); 378 379 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterExcl(&CritSectRw), VINF_SUCCESS, false); 380 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriteRecursion(&CritSectRw) == 2, false); 381 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriterReadRecursion(&CritSectRw) == 0, false); 382 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsWriteOwner(&CritSectRw) == true, false); 383 384 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterShared(&CritSectRw), VINF_SUCCESS, false); 385 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriteRecursion(&CritSectRw) == 2, false); 386 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriterReadRecursion(&CritSectRw) == 1, false); 387 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsWriteOwner(&CritSectRw) == true, false); 388 389 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwEnterExcl(&CritSectRw), VINF_SUCCESS, false); 390 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriteRecursion(&CritSectRw) == 3, false); 391 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriterReadRecursion(&CritSectRw) == 1, false); 392 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsWriteOwner(&CritSectRw) == true, false); 393 394 /* midway */ 395 396 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 397 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriteRecursion(&CritSectRw) == 2, false); 398 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriterReadRecursion(&CritSectRw) == 1, false); 399 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsWriteOwner(&CritSectRw) == true, false); 400 401 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS, false); 402 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriteRecursion(&CritSectRw) == 2, false); 403 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriterReadRecursion(&CritSectRw) == 0, false); 404 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsWriteOwner(&CritSectRw) == true, false); 405 406 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 407 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriteRecursion(&CritSectRw) == 1, false); 408 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriterReadRecursion(&CritSectRw) == 0, false); 409 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsWriteOwner(&CritSectRw) == true, false); 410 411 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 412 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriteRecursion(&CritSectRw) == 0, false); 413 RTTEST_CHECK_RET(g_hTest, RTCritSectRwGetWriterReadRecursion(&CritSectRw) == 0, false); 414 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsWriteOwner(&CritSectRw) == false, false); 397 415 } 398 416 399 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestWrite(hSemRW, RT_INDEFINITE_WAIT), VINF_SUCCESS, false); 400 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseWrite(hSemRW), VINF_SUCCESS, false); 401 402 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestWrite(hSemRW, RT_INDEFINITE_WAIT), VINF_SUCCESS, false); 403 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestRead(hSemRW, RT_INDEFINITE_WAIT), VINF_SUCCESS, false); 404 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseRead(hSemRW), VINF_SUCCESS, false); 405 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseWrite(hSemRW), VINF_SUCCESS, false); 406 407 for (unsigned cMs = 0; cMs < 50; cMs++) 408 { 409 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestWrite(hSemRW, cMs), VINF_SUCCESS, false); 410 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriteRecursion(hSemRW) == 1, false); 411 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriterReadRecursion(hSemRW) == 0, false); 412 RTTEST_CHECK_RET(g_hTest, RTSemRWIsWriteOwner(hSemRW) == true, false); 413 414 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestWrite(hSemRW, cMs), VINF_SUCCESS, false); 415 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriteRecursion(hSemRW) == 2, false); 416 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriterReadRecursion(hSemRW) == 0, false); 417 RTTEST_CHECK_RET(g_hTest, RTSemRWIsWriteOwner(hSemRW) == true, false); 418 419 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestRead(hSemRW, cMs), VINF_SUCCESS, false); 420 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriteRecursion(hSemRW) == 2, false); 421 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriterReadRecursion(hSemRW) == 1, false); 422 RTTEST_CHECK_RET(g_hTest, RTSemRWIsWriteOwner(hSemRW) == true, false); 423 424 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWRequestWrite(hSemRW, cMs), VINF_SUCCESS, false); 425 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriteRecursion(hSemRW) == 3, false); 426 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriterReadRecursion(hSemRW) == 1, false); 427 RTTEST_CHECK_RET(g_hTest, RTSemRWIsWriteOwner(hSemRW) == true, false); 428 429 /* midway */ 430 431 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseWrite(hSemRW), VINF_SUCCESS, false); 432 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriteRecursion(hSemRW) == 2, false); 433 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriterReadRecursion(hSemRW) == 1, false); 434 RTTEST_CHECK_RET(g_hTest, RTSemRWIsWriteOwner(hSemRW) == true, false); 435 436 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseRead(hSemRW), VINF_SUCCESS, false); 437 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriteRecursion(hSemRW) == 2, false); 438 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriterReadRecursion(hSemRW) == 0, false); 439 RTTEST_CHECK_RET(g_hTest, RTSemRWIsWriteOwner(hSemRW) == true, false); 440 441 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseWrite(hSemRW), VINF_SUCCESS, false); 442 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriteRecursion(hSemRW) == 1, false); 443 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriterReadRecursion(hSemRW) == 0, false); 444 RTTEST_CHECK_RET(g_hTest, RTSemRWIsWriteOwner(hSemRW) == true, false); 445 446 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWReleaseWrite(hSemRW), VINF_SUCCESS, false); 447 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriteRecursion(hSemRW) == 0, false); 448 RTTEST_CHECK_RET(g_hTest, RTSemRWGetWriterReadRecursion(hSemRW) == 0, false); 449 RTTEST_CHECK_RET(g_hTest, RTSemRWIsWriteOwner(hSemRW) == false, false); 450 } 451 452 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWDestroy(hSemRW), VINF_SUCCESS, false); 453 RTTEST_CHECK_RC_RET(g_hTest, RTSemRWDestroy(NIL_RTSEMRW), VINF_SUCCESS, false); 417 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwTryEnterShared(&CritSectRw), VINF_SUCCESS, false); 418 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS, false); 419 420 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwTryEnterShared(&CritSectRw), VINF_SUCCESS, false); 421 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwTryEnterShared(&CritSectRw), VINF_SUCCESS, false); 422 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS, false); 423 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS, false); 424 425 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwTryEnterExcl(&CritSectRw), VINF_SUCCESS, false); 426 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 427 428 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwTryEnterExcl(&CritSectRw), VINF_SUCCESS, false); 429 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwTryEnterExcl(&CritSectRw), VINF_SUCCESS, false); 430 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 431 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 432 433 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwTryEnterExcl(&CritSectRw), VINF_SUCCESS, false); 434 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwTryEnterShared(&CritSectRw), VINF_SUCCESS, false); 435 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveShared(&CritSectRw), VINF_SUCCESS, false); 436 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwLeaveExcl(&CritSectRw), VINF_SUCCESS, false); 437 438 439 RTTEST_CHECK_RET(g_hTest, RTCritSectRwIsInitialized(&CritSectRw), false); 440 RTTEST_CHECK_RC_RET(g_hTest, RTCritSectRwDelete(&CritSectRw), VINF_SUCCESS, false); 441 RTTEST_CHECK_RET(g_hTest, !RTCritSectRwIsInitialized(&CritSectRw), false); 454 442 455 443 return true; … … 458 446 int main(int argc, char **argv) 459 447 { 460 int rc = RTTestInitAndCreate("tstRT SemRW", &g_hTest);448 int rc = RTTestInitAndCreate("tstRTCritSectRw", &g_hTest); 461 449 if (rc) 462 450 return 1; … … 467 455 if (argc == 1) 468 456 { 469 Test2(); 470 Test3(); 457 TestNegative(); 471 458 472 459 /* threads, seconds, writePercent, yield, quiet */
Note:
See TracChangeset
for help on using the changeset viewer.