Changeset 25620 in vbox for trunk/src/VBox/Runtime/generic
- Timestamp:
- Jan 2, 2010 10:18:07 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 56311
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/generic/semrw-generic.cpp
r25618 r25620 91 91 92 92 93 /* No debug wrapping here. */ 94 #undef RTSemRWRequestRead 95 #undef RTSemRWRequestReadNoResume 96 #undef RTSemRWRequestWrite 97 #undef RTSemRWRequestWriteNoResume 98 93 99 94 100 RTDECL(int) RTSemRWCreate(PRTSEMRW pRWSem) … … 217 223 218 224 219 RTDECL(int) RTSemRWRequestRead(RTSEMRW RWSem, unsigned cMillies) 220 { 221 PRTLOCKVALSRCPOS pSrcPos = NULL; 222 225 DECL_FORCE_INLINE(int) rtSemRWRequestRead(RTSEMRW RWSem, unsigned cMillies, bool fInterruptible, PCRTLOCKVALSRCPOS pSrcPos) 226 { 223 227 /* 224 228 * Validate handle. … … 326 330 RTThreadBlocking(hThreadSelf, RTTHREADSTATE_RW_READ); 327 331 #endif 328 int rcWait = rc = RTSemEventMultiWait(pThis->ReadEvent, cMillies); 332 int rcWait; 333 if (fInterruptible) 334 rcWait = rc = RTSemEventMultiWaitNoResume(pThis->ReadEvent, cMillies); 335 else 336 rcWait = rc = RTSemEventMultiWait(pThis->ReadEvent, cMillies); 329 337 RTThreadUnblocked(hThreadSelf, RTTHREADSTATE_RW_READ); 330 338 if (RT_FAILURE(rc) && rc != VERR_TIMEOUT) /* handle timeout below */ … … 382 390 return rc; 383 391 } 392 393 394 RTDECL(int) RTSemRWRequestRead(RTSEMRW RWSem, unsigned cMillies) 395 { 396 #ifndef RTSEMRW_STRICT 397 return rtSemRWRequestRead(RWSem, cMillies, false, NULL); 398 #else 399 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_NORMAL_API(); 400 return rtSemRWRequestRead(RWSem, cMillies, false, &SrcPos); 401 #endif 402 } 384 403 RT_EXPORT_SYMBOL(RTSemRWRequestRead); 385 404 386 405 406 RTDECL(int) RTSemRWRequestReadDebug(RTSEMRW RWSem, unsigned cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL) 407 { 408 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_DEBUG_API(); 409 return rtSemRWRequestRead(RWSem, cMillies, false, &SrcPos); 410 } 411 RT_EXPORT_SYMBOL(RTSemRWRequestReadDebug); 412 413 387 414 RTDECL(int) RTSemRWRequestReadNoResume(RTSEMRW RWSem, unsigned cMillies) 388 415 { 389 return RTSemRWRequestRead(RWSem, cMillies); 416 #ifndef RTSEMRW_STRICT 417 return rtSemRWRequestRead(RWSem, cMillies, true, NULL); 418 #else 419 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_NORMAL_API(); 420 return rtSemRWRequestRead(RWSem, cMillies, true, &SrcPos); 421 #endif 390 422 } 391 423 RT_EXPORT_SYMBOL(RTSemRWRequestReadNoResume); 424 425 426 RTDECL(int) RTSemRWRequestReadNoResumeDebug(RTSEMRW RWSem, unsigned cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL) 427 { 428 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_DEBUG_API(); 429 return rtSemRWRequestRead(RWSem, cMillies, true, &SrcPos); 430 } 431 RT_EXPORT_SYMBOL(RTSemRWRequestReadNoResumeDebug); 392 432 393 433 … … 472 512 473 513 474 RTDECL(int) RTSemRWRequestWrite(RTSEMRW RWSem, unsigned cMillies) 475 { 476 PRTLOCKVALSRCPOS pSrcPos = NULL; 477 514 DECL_FORCE_INLINE(int) rtSemRWRequestWrite(RTSEMRW RWSem, unsigned cMillies, bool fInterruptible, PCRTLOCKVALSRCPOS pSrcPos) 515 { 478 516 /* 479 517 * Validate handle. … … 580 618 RTThreadBlocking(hThreadSelf, RTTHREADSTATE_RW_WRITE); 581 619 #endif 582 int rcWait = rc = RTSemEventWait(pThis->WriteEvent, cMillies); 620 int rcWait; 621 if (fInterruptible) 622 rcWait = rc = RTSemEventWaitNoResume(pThis->WriteEvent, cMillies); 623 else 624 rcWait = rc = RTSemEventWait(pThis->WriteEvent, cMillies); 583 625 RTThreadUnblocked(hThreadSelf, RTTHREADSTATE_RW_WRITE); 584 626 if (RT_UNLIKELY(RT_FAILURE_NP(rc) && rc != VERR_TIMEOUT)) /* timeouts are handled below */ … … 651 693 return rc; 652 694 } 695 696 697 RTDECL(int) RTSemRWRequestWrite(RTSEMRW RWSem, unsigned cMillies) 698 { 699 #ifndef RTSEMRW_STRICT 700 return rtSemRWRequestWrite(RWSem, cMillies, false, NULL); 701 #else 702 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_NORMAL_API(); 703 return rtSemRWRequestWrite(RWSem, cMillies, false, &SrcPos); 704 #endif 705 } 653 706 RT_EXPORT_SYMBOL(RTSemRWRequestWrite); 654 707 655 708 709 RTDECL(int) RTSemRWRequestWriteDebug(RTSEMRW RWSem, unsigned cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL) 710 { 711 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_DEBUG_API(); 712 return rtSemRWRequestWrite(RWSem, cMillies, false, &SrcPos); 713 } 714 RT_EXPORT_SYMBOL(RTSemRWRequestWriteDebug); 715 716 656 717 RTDECL(int) RTSemRWRequestWriteNoResume(RTSEMRW RWSem, unsigned cMillies) 657 718 { 658 return RTSemRWRequestWrite(RWSem, cMillies); 719 #ifndef RTSEMRW_STRICT 720 return rtSemRWRequestWrite(RWSem, cMillies, true, NULL); 721 #else 722 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_NORMAL_API(); 723 return rtSemRWRequestWrite(RWSem, cMillies, true, &SrcPos); 724 #endif 659 725 } 660 726 RT_EXPORT_SYMBOL(RTSemRWRequestWriteNoResume); 727 728 729 RTDECL(int) RTSemRWRequestWriteNoResumeDebug(RTSEMRW RWSem, unsigned cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL) 730 { 731 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_DEBUG_API(); 732 return rtSemRWRequestWrite(RWSem, cMillies, true, &SrcPos); 733 } 734 RT_EXPORT_SYMBOL(RTSemRWRequestWriteNoResumeDebug); 661 735 662 736
Note:
See TracChangeset
for help on using the changeset viewer.