Changeset 25908 in vbox for trunk/src/VBox/Runtime/generic/semrw-generic.cpp
- Timestamp:
- Jan 18, 2010 10:07:28 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 56726
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/generic/semrw-generic.cpp
r25831 r25908 869 869 RTDECL(bool) RTSemRWIsWriteOwner(RTSEMRW hRWSem) 870 870 { 871 /* 872 * Validate handle. 873 */ 871 874 struct RTSEMRWINTERNAL *pThis = hRWSem; 872 873 /*874 * Validate handle.875 */876 875 AssertPtrReturn(pThis, false); 877 876 AssertReturn(pThis->u32Magic == RTSEMRW_MAGIC, false); … … 886 885 } 887 886 RT_EXPORT_SYMBOL(RTSemRWIsWriteOwner); 887 888 889 RTDECL(bool) RTSemRWIsReadOwner(RTSEMRW hRWSem, bool fWannaHear) 890 { 891 /* 892 * Validate handle. 893 */ 894 struct RTSEMRWINTERNAL *pThis = hRWSem; 895 AssertPtrReturn(pThis, false); 896 AssertReturn(pThis->u32Magic == RTSEMRW_MAGIC, false); 897 898 /* 899 * Check write ownership. The writer is also a valid reader. 900 */ 901 RTNATIVETHREAD hNativeSelf = RTThreadNativeSelf(); 902 RTNATIVETHREAD hWriter; 903 ASMAtomicUoReadHandle(&pThis->hWriter, &hWriter); 904 if (hWriter == hNativeSelf) 905 return true; 906 if (hWriter != NIL_RTNATIVETHREAD) 907 return false; 908 909 #ifdef RTSEMRW_STRICT 910 /* 911 * Ask the lock validator. 912 */ 913 return RTLockValidatorRecSharedIsOwner(&pThis->ValidatorRead, NIL_RTTHREAD); 914 #else 915 /* 916 * If there are no reads we cannot be one of them... But if there are we 917 * cannot know and can only return what the caller want to hear. 918 */ 919 if (pThis->cReads == 0) 920 return false; 921 return fWannaHear; 922 #endif 923 } 924 RT_EXPORT_SYMBOL(RTSemRWIsReadOwner); 888 925 889 926
Note:
See TracChangeset
for help on using the changeset viewer.