Changeset 20597 in vbox for trunk/src/VBox/Runtime/testcase
- Timestamp:
- Jun 15, 2009 5:54:06 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 48643
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/tstSemRW.cpp
r20443 r20597 79 79 { 80 80 int rc; 81 unsigned readrec = RTRandU32Ex(0, 3); 82 unsigned writerec = RTRandU32Ex(0, 3); 83 /* Don't overdo recursion testing. */ 84 if (readrec > 1) 85 readrec--; 86 if (writerec > 1) 87 writerec--; 88 81 89 fWrite = (c100 < g_uWritePercent); 82 90 if (fWrite) 83 91 { 84 rc = RTSemRWRequestWriteNoResume(g_hSemRW, RT_INDEFINITE_WAIT); 85 if (RT_FAILURE(rc)) 86 { 87 PrintError("%x: RTSemRWRequestWriteNoResume failed with %Rrc\n", rc); 88 break; 89 } 92 for (unsigned i = 0; i <= writerec; i++) 93 { 94 rc = RTSemRWRequestWriteNoResume(g_hSemRW, RT_INDEFINITE_WAIT); 95 if (RT_FAILURE(rc)) 96 { 97 PrintError("%x: RTSemRWRequestWriteNoResume failed with %Rrc\n", rc); 98 break; 99 } 100 } 101 if (RT_FAILURE(rc)) 102 break; 90 103 if (ASMAtomicIncU32(&g_cbConcurrentWrite) != 1) 91 104 { … … 114 127 } 115 128 } 129 for (unsigned i = 0; i < readrec; i++) 130 { 131 rc = RTSemRWRequestReadNoResume(g_hSemRW, RT_INDEFINITE_WAIT); 132 if (RT_FAILURE(rc)) 133 { 134 PrintError("%x: RTSemRWRequestReadNoResume failed with %Rrc\n", rc); 135 break; 136 } 137 } 138 if (RT_FAILURE(rc)) 139 break; 116 140 117 141 /* … … 127 151 RTThreadYield(); 128 152 153 for (unsigned i = 0; i < readrec; i++) 154 { 155 rc = RTSemRWReleaseRead(g_hSemRW); 156 if (RT_FAILURE(rc)) 157 { 158 PrintError("%x: RTSemRWReleaseRead failed with %Rrc\n", rc); 159 break; 160 } 161 } 162 if (RT_FAILURE(rc)) 163 break; 164 129 165 if (fWrite) 130 166 { … … 139 175 break; 140 176 } 141 rc = RTSemRWReleaseWrite(g_hSemRW); 142 if (RT_FAILURE(rc)) 143 { 144 PrintError("%x: RTSemRWReleaseWrite failed with %Rrc\n", rc); 145 break; 177 for (unsigned i = 0; i <= writerec; i++) 178 { 179 rc = RTSemRWReleaseWrite(g_hSemRW); 180 if (RT_FAILURE(rc)) 181 { 182 PrintError("%x: RTSemRWReleaseWrite failed with %Rrc\n", rc); 183 break; 184 } 146 185 } 147 186 }
Note:
See TracChangeset
for help on using the changeset viewer.