Changeset 25720 in vbox for trunk/src/VBox/Runtime/r3/posix
- Timestamp:
- Jan 11, 2010 1:57:09 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 56460
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r3/posix/semeventmulti-posix.cpp
r25704 r25720 86 86 87 87 88 RTDECL(int) RTSemEventMultiCreate(PRTSEMEVENTMULTI pEventMultiSem) 89 { 88 RTDECL(int) RTSemEventMultiCreate(PRTSEMEVENTMULTI phEventMultiSem) 89 { 90 return RTSemEventMultiCreateEx(phEventMultiSem, 0 /*fFlags*/, NIL_RTLOCKVALCLASS, NULL); 91 } 92 93 94 RTDECL(int) RTSemEventMultiCreateEx(PRTSEMEVENTMULTI phEventMultiSem, uint32_t fFlags, RTLOCKVALCLASS hClass, 95 const char *pszNameFmt, ...) 96 { 97 AssertReturn(!(fFlags & ~RTSEMEVENTMULTI_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 98 99 /* 100 * Allocate semaphore handle. 101 */ 90 102 int rc; 91 92 /*93 * Allocate semaphore handle.94 */95 103 struct RTSEMEVENTMULTIINTERNAL *pThis = (struct RTSEMEVENTMULTIINTERNAL *)RTMemAlloc(sizeof(struct RTSEMEVENTMULTIINTERNAL)); 96 104 if (pThis) … … 122 130 ASMAtomicXchgU32(&pThis->cWaiters, 0); 123 131 #ifdef RTSEMEVENTMULTI_STRICT 124 RTLockValidatorRecSharedInit(&pThis->Signallers, 125 NIL_RTLOCKVALCLASS, RTLOCKVAL_SUB_CLASS_ANY, 126 pThis, true /*fSignaller*/, true /*fEnabled*/, "RTSemEvent"); 132 va_list va; 133 va_start(va, pszNameFmt); 134 RTLockValidatorRecSharedInitV(&pThis->Signallers, hClass, RTLOCKVAL_SUB_CLASS_ANY, pThis, 135 true /*fSignaller*/, !(fFlags & RTSEMEVENTMULTI_FLAGS_NO_LOCK_VAL), 136 pszNameFmt, va); 137 va_end(va); 127 138 pThis->fEverHadSignallers = false; 128 139 #endif 129 140 130 *p EventMultiSem = pThis;141 *phEventMultiSem = pThis; 131 142 return VINF_SUCCESS; 132 143 } … … 150 161 151 162 152 RTDECL(int) RTSemEventMultiDestroy(RTSEMEVENTMULTI EventMultiSem)163 RTDECL(int) RTSemEventMultiDestroy(RTSEMEVENTMULTI hEventMultiSem) 153 164 { 154 165 /* 155 166 * Validate handle. 156 167 */ 157 struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;168 struct RTSEMEVENTMULTIINTERNAL *pThis = hEventMultiSem; 158 169 if (pThis == NIL_RTSEMEVENTMULTI) 159 170 return VINF_SUCCESS; … … 177 188 if (rc) 178 189 { 179 AssertMsgFailed(("Failed to destroy event sem %p, rc=%d.\n", EventMultiSem, rc));190 AssertMsgFailed(("Failed to destroy event sem %p, rc=%d.\n", hEventMultiSem, rc)); 180 191 return RTErrConvertFromErrno(rc); 181 192 } … … 194 205 if (rc) 195 206 { 196 AssertMsgFailed(("Failed to destroy event sem %p, rc=%d. (mutex)\n", EventMultiSem, rc));207 AssertMsgFailed(("Failed to destroy event sem %p, rc=%d. (mutex)\n", hEventMultiSem, rc)); 197 208 return RTErrConvertFromErrno(rc); 198 209 } … … 209 220 210 221 211 RTDECL(int) RTSemEventMultiSignal(RTSEMEVENTMULTI EventMultiSem)222 RTDECL(int) RTSemEventMultiSignal(RTSEMEVENTMULTI hEventMultiSem) 212 223 { 213 224 /* 214 225 * Validate input. 215 226 */ 216 struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;227 struct RTSEMEVENTMULTIINTERNAL *pThis = hEventMultiSem; 217 228 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 218 229 uint32_t u32 = pThis->u32State; … … 234 245 if (rc) 235 246 { 236 AssertMsgFailed(("Failed to lock event sem %p, rc=%d.\n", EventMultiSem, rc));247 AssertMsgFailed(("Failed to lock event sem %p, rc=%d.\n", hEventMultiSem, rc)); 237 248 return RTErrConvertFromErrno(rc); 238 249 } … … 245 256 ASMAtomicXchgU32(&pThis->u32State, EVENTMULTI_STATE_SIGNALED); 246 257 rc = pthread_cond_broadcast(&pThis->Cond); 247 AssertMsg(!rc, ("Failed to signal event sem %p, rc=%d.\n", EventMultiSem, rc));258 AssertMsg(!rc, ("Failed to signal event sem %p, rc=%d.\n", hEventMultiSem, rc)); 248 259 } 249 260 else if (pThis->u32State == EVENTMULTI_STATE_SIGNALED) 250 261 { 251 262 rc = pthread_cond_broadcast(&pThis->Cond); /* give'm another kick... */ 252 AssertMsg(!rc, ("Failed to signal event sem %p, rc=%d. (2)\n", EventMultiSem, rc));263 AssertMsg(!rc, ("Failed to signal event sem %p, rc=%d. (2)\n", hEventMultiSem, rc)); 253 264 } 254 265 else … … 259 270 */ 260 271 int rc2 = pthread_mutex_unlock(&pThis->Mutex); 261 AssertMsg(!rc2, ("Failed to unlock event sem %p, rc=%d.\n", EventMultiSem, rc));272 AssertMsg(!rc2, ("Failed to unlock event sem %p, rc=%d.\n", hEventMultiSem, rc)); 262 273 if (rc) 263 274 return RTErrConvertFromErrno(rc); … … 269 280 270 281 271 RTDECL(int) RTSemEventMultiReset(RTSEMEVENTMULTI EventMultiSem)282 RTDECL(int) RTSemEventMultiReset(RTSEMEVENTMULTI hEventMultiSem) 272 283 { 273 284 /* 274 285 * Validate input. 275 286 */ 276 struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;287 struct RTSEMEVENTMULTIINTERNAL *pThis = hEventMultiSem; 277 288 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 278 289 uint32_t u32 = pThis->u32State; … … 285 296 if (rc) 286 297 { 287 AssertMsgFailed(("Failed to lock event multi sem %p, rc=%d.\n", EventMultiSem, rc));298 AssertMsgFailed(("Failed to lock event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); 288 299 return RTErrConvertFromErrno(rc); 289 300 } … … 303 314 if (rc) 304 315 { 305 AssertMsgFailed(("Failed to unlock event multi sem %p, rc=%d.\n", EventMultiSem, rc));316 AssertMsgFailed(("Failed to unlock event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); 306 317 return RTErrConvertFromErrno(rc); 307 318 } … … 312 323 313 324 314 static int rtSemEventMultiWait(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies, bool fAutoResume)325 static int rtSemEventMultiWait(RTSEMEVENTMULTI hEventMultiSem, unsigned cMillies, bool fAutoResume) 315 326 { 316 327 PCRTLOCKVALSRCPOS pSrcPos = NULL; … … 319 330 * Validate input. 320 331 */ 321 struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;332 struct RTSEMEVENTMULTIINTERNAL *pThis = hEventMultiSem; 322 333 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 323 334 uint32_t u32 = pThis->u32State; … … 333 344 if (rc) 334 345 { 335 AssertMsgFailed(("Failed to lock event multi sem %p, rc=%d.\n", EventMultiSem, rc));346 AssertMsgFailed(("Failed to lock event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); 336 347 return RTErrConvertFromErrno(rc); 337 348 } … … 345 356 ASMAtomicDecU32(&pThis->cWaiters); 346 357 rc = pthread_mutex_unlock(&pThis->Mutex); 347 AssertMsg(!rc, ("Failed to unlock event multi sem %p, rc=%d.\n", EventMultiSem, rc)); NOREF(rc);358 AssertMsg(!rc, ("Failed to unlock event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); NOREF(rc); 348 359 return VINF_SUCCESS; 349 360 } … … 351 362 { 352 363 rc = pthread_mutex_unlock(&pThis->Mutex); 353 AssertMsg(!rc, ("Failed to unlock event multi sem %p, rc=%d.\n", EventMultiSem, rc)); NOREF(rc);364 AssertMsg(!rc, ("Failed to unlock event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); NOREF(rc); 354 365 return VERR_SEM_DESTROYED; 355 366 } … … 377 388 if (rc) 378 389 { 379 AssertMsgFailed(("Failed to wait on event multi sem %p, rc=%d.\n", EventMultiSem, rc));390 AssertMsgFailed(("Failed to wait on event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); 380 391 ASMAtomicDecU32(&pThis->cWaiters); 381 392 int rc2 = pthread_mutex_unlock(&pThis->Mutex); 382 AssertMsg(!rc2, ("Failed to unlock event multi sem %p, rc=%d.\n", EventMultiSem, rc2)); NOREF(rc2);393 AssertMsg(!rc2, ("Failed to unlock event multi sem %p, rc=%d.\n", hEventMultiSem, rc2)); NOREF(rc2); 383 394 return RTErrConvertFromErrno(rc); 384 395 } … … 421 432 if (rc) 422 433 { 423 AssertMsg(rc == ETIMEDOUT, ("Failed to lock event multi sem %p, rc=%d.\n", EventMultiSem, rc));434 AssertMsg(rc == ETIMEDOUT, ("Failed to lock event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); 424 435 return RTErrConvertFromErrno(rc); 425 436 } … … 433 444 ASMAtomicDecU32(&pThis->cWaiters); 434 445 rc = pthread_mutex_unlock(&pThis->Mutex); 435 AssertMsg(!rc, ("Failed to unlock event multi sem %p, rc=%d.\n", EventMultiSem, rc)); NOREF(rc);446 AssertMsg(!rc, ("Failed to unlock event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); NOREF(rc); 436 447 return VINF_SUCCESS; 437 448 } … … 439 450 { 440 451 rc = pthread_mutex_unlock(&pThis->Mutex); 441 AssertMsg(!rc, ("Failed to unlock event multi sem %p, rc=%d.\n", EventMultiSem, rc)); NOREF(rc);452 AssertMsg(!rc, ("Failed to unlock event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); NOREF(rc); 442 453 return VERR_SEM_DESTROYED; 443 454 } … … 473 484 if (rc && (rc != EINTR || !fAutoResume)) /* according to SuS this function shall not return EINTR, but linux man page says differently. */ 474 485 { 475 AssertMsg(rc == ETIMEDOUT, ("Failed to wait on event multi sem %p, rc=%d.\n", EventMultiSem, rc));486 AssertMsg(rc == ETIMEDOUT, ("Failed to wait on event multi sem %p, rc=%d.\n", hEventMultiSem, rc)); 476 487 ASMAtomicDecU32(&pThis->cWaiters); 477 488 int rc2 = pthread_mutex_unlock(&pThis->Mutex); 478 AssertMsg(!rc2, ("Failed to unlock event multi sem %p, rc=%d.\n", EventMultiSem, rc2)); NOREF(rc2);489 AssertMsg(!rc2, ("Failed to unlock event multi sem %p, rc=%d.\n", hEventMultiSem, rc2)); NOREF(rc2); 479 490 return RTErrConvertFromErrno(rc); 480 491 } … … 484 495 485 496 486 RTDECL(int) RTSemEventMultiWait(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies)487 { 488 int rc = rtSemEventMultiWait( EventMultiSem, cMillies, true);497 RTDECL(int) RTSemEventMultiWait(RTSEMEVENTMULTI hEventMultiSem, unsigned cMillies) 498 { 499 int rc = rtSemEventMultiWait(hEventMultiSem, cMillies, true); 489 500 Assert(rc != VERR_INTERRUPTED); 490 501 return rc; … … 492 503 493 504 494 RTDECL(int) RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies)495 { 496 return rtSemEventMultiWait( EventMultiSem, cMillies, false);505 RTDECL(int) RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI hEventMultiSem, unsigned cMillies) 506 { 507 return rtSemEventMultiWait(hEventMultiSem, cMillies, false); 497 508 } 498 509
Note:
See TracChangeset
for help on using the changeset viewer.