Changeset 25717 in vbox for trunk/src/VBox/Runtime/r3/posix
- Timestamp:
- Jan 11, 2010 1:24:09 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 56457
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r3/posix/semevent-posix.cpp
r25704 r25717 96 96 97 97 98 RTDECL(int) RTSemEventCreate(PRTSEMEVENT pEventSem) 99 { 98 RTDECL(int) RTSemEventCreate(PRTSEMEVENT phEventSem) 99 { 100 return RTSemEventCreateEx(phEventSem, 0 /*fFlags*/, NIL_RTLOCKVALCLASS, NULL); 101 } 102 103 104 RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...) 105 { 106 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 107 108 /* 109 * Allocate semaphore handle. 110 */ 100 111 int rc; 101 102 /*103 * Allocate semaphore handle.104 */105 112 struct RTSEMEVENTINTERNAL *pThis = (struct RTSEMEVENTINTERNAL *)RTMemAlloc(sizeof(struct RTSEMEVENTINTERNAL)); 106 113 if (pThis) … … 132 139 ASMAtomicXchgU32(&pThis->cWaiters, 0); 133 140 #ifdef RTSEMEVENT_STRICT 134 RTLockValidatorRecSharedInit(&pThis->Signallers, 135 NIL_RTLOCKVALCLASS, RTLOCKVAL_SUB_CLASS_ANY, 136 pThis, true /*fSignaller*/, true /*fEnabled*/, "RTSemEvent"); 141 va_list va; 142 va_start(va, pszNameFmt); 143 RTLockValidatorRecSharedInitV(&pThis->Signallers, hClass, RTLOCKVAL_SUB_CLASS_ANY, pThis, 144 true /*fSignaller*/, !(fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL), 145 pszNameFmt, va); 146 va_end(va); 137 147 pThis->fEverHadSignallers = false; 138 148 #endif 139 149 140 *p EventSem = pThis;150 *phEventSem = pThis; 141 151 return VINF_SUCCESS; 142 152 } 153 143 154 pthread_mutexattr_destroy(&MutexAttr); 144 155 } … … 158 169 159 170 160 RTDECL(int) RTSemEventDestroy(RTSEMEVENT EventSem)171 RTDECL(int) RTSemEventDestroy(RTSEMEVENT hEventSem) 161 172 { 162 173 /* 163 174 * Validate handle. 164 175 */ 165 struct RTSEMEVENTINTERNAL *pThis = EventSem;166 if (pThis == NIL_RTSEMEVENT) /* don't bitch */167 return V ERR_INVALID_HANDLE;176 struct RTSEMEVENTINTERNAL *pThis = hEventSem; 177 if (pThis == NIL_RTSEMEVENT) 178 return VINF_SUCCESS; 168 179 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 169 180 uint32_t u32 = pThis->u32State; … … 185 196 if (rc) 186 197 { 187 AssertMsgFailed(("Failed to destroy event sem %p, rc=%d.\n", EventSem, rc));198 AssertMsgFailed(("Failed to destroy event sem %p, rc=%d.\n", pThis, rc)); 188 199 return RTErrConvertFromErrno(rc); 189 200 } … … 202 213 if (rc) 203 214 { 204 AssertMsgFailed(("Failed to destroy event sem %p, rc=%d. (mutex)\n", EventSem, rc));215 AssertMsgFailed(("Failed to destroy event sem %p, rc=%d. (mutex)\n", pThis, rc)); 205 216 return RTErrConvertFromErrno(rc); 206 217 } … … 217 228 218 229 219 RTDECL(int) RTSemEventSignal(RTSEMEVENT EventSem)230 RTDECL(int) RTSemEventSignal(RTSEMEVENT hEventSem) 220 231 { 221 232 /* 222 233 * Validate input. 223 234 */ 224 struct RTSEMEVENTINTERNAL *pThis = EventSem;235 struct RTSEMEVENTINTERNAL *pThis = hEventSem; 225 236 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 226 237 uint32_t u32 = pThis->u32State; … … 242 253 if (rc) 243 254 { 244 AssertMsgFailed(("Failed to lock event sem %p, rc=%d.\n", EventSem, rc));255 AssertMsgFailed(("Failed to lock event sem %p, rc=%d.\n", hEventSem, rc)); 245 256 return RTErrConvertFromErrno(rc); 246 257 } … … 253 264 ASMAtomicXchgU32(&pThis->u32State, EVENT_STATE_SIGNALED); 254 265 rc = pthread_cond_signal(&pThis->Cond); 255 AssertMsg(!rc, ("Failed to signal event sem %p, rc=%d.\n", EventSem, rc));266 AssertMsg(!rc, ("Failed to signal event sem %p, rc=%d.\n", hEventSem, rc)); 256 267 } 257 268 else if (pThis->u32State == EVENT_STATE_SIGNALED) 258 269 { 259 270 rc = pthread_cond_signal(&pThis->Cond); /* give'm another kick... */ 260 AssertMsg(!rc, ("Failed to signal event sem %p, rc=%d. (2)\n", EventSem, rc));271 AssertMsg(!rc, ("Failed to signal event sem %p, rc=%d. (2)\n", hEventSem, rc)); 261 272 } 262 273 else … … 267 278 */ 268 279 int rc2 = pthread_mutex_unlock(&pThis->Mutex); 269 AssertMsg(!rc2, ("Failed to unlock event sem %p, rc=%d.\n", EventSem, rc));280 AssertMsg(!rc2, ("Failed to unlock event sem %p, rc=%d.\n", hEventSem, rc)); 270 281 if (rc) 271 282 return RTErrConvertFromErrno(rc); … … 277 288 278 289 279 DECL_FORCE_INLINE(int) rtSemEventWait(RTSEMEVENT EventSem, unsigned cMillies, bool fAutoResume)290 DECL_FORCE_INLINE(int) rtSemEventWait(RTSEMEVENT hEventSem, unsigned cMillies, bool fAutoResume) 280 291 { 281 292 PCRTLOCKVALSRCPOS pSrcPos = NULL; … … 284 295 * Validate input. 285 296 */ 286 struct RTSEMEVENTINTERNAL *pThis = EventSem;297 struct RTSEMEVENTINTERNAL *pThis = hEventSem; 287 298 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 288 299 uint32_t u32 = pThis->u32State; … … 304 315 { 305 316 ASMAtomicDecU32(&pThis->cWaiters); 306 AssertMsgFailed(("Failed to lock event sem %p, rc=%d.\n", EventSem, rc));317 AssertMsgFailed(("Failed to lock event sem %p, rc=%d.\n", hEventSem, rc)); 307 318 return RTErrConvertFromErrno(rc); 308 319 } … … 316 327 ASMAtomicDecU32(&pThis->cWaiters); 317 328 rc = pthread_mutex_unlock(&pThis->Mutex); 318 AssertMsg(!rc, ("Failed to unlock event sem %p, rc=%d.\n", EventSem, rc)); NOREF(rc);329 AssertMsg(!rc, ("Failed to unlock event sem %p, rc=%d.\n", hEventSem, rc)); NOREF(rc); 319 330 return VINF_SUCCESS; 320 331 } … … 322 333 { 323 334 rc = pthread_mutex_unlock(&pThis->Mutex); 324 AssertMsg(!rc, ("Failed to unlock event sem %p, rc=%d.\n", EventSem, rc)); NOREF(rc);335 AssertMsg(!rc, ("Failed to unlock event sem %p, rc=%d.\n", hEventSem, rc)); NOREF(rc); 325 336 return VERR_SEM_DESTROYED; 326 337 } … … 348 359 if (rc) 349 360 { 350 AssertMsgFailed(("Failed to wait on event sem %p, rc=%d.\n", EventSem, rc));361 AssertMsgFailed(("Failed to wait on event sem %p, rc=%d.\n", hEventSem, rc)); 351 362 ASMAtomicDecU32(&pThis->cWaiters); 352 363 int rc2 = pthread_mutex_unlock(&pThis->Mutex); 353 AssertMsg(!rc2, ("Failed to unlock event sem %p, rc=%d.\n", EventSem, rc2)); NOREF(rc2);364 AssertMsg(!rc2, ("Failed to unlock event sem %p, rc=%d.\n", hEventSem, rc2)); NOREF(rc2); 354 365 return RTErrConvertFromErrno(rc); 355 366 } … … 390 401 { 391 402 ASMAtomicDecU32(&pThis->cWaiters); 392 AssertMsg(rc == ETIMEDOUT, ("Failed to lock event sem %p, rc=%d.\n", EventSem, rc));403 AssertMsg(rc == ETIMEDOUT, ("Failed to lock event sem %p, rc=%d.\n", hEventSem, rc)); 393 404 return RTErrConvertFromErrno(rc); 394 405 } … … 402 413 ASMAtomicDecU32(&pThis->cWaiters); 403 414 rc = pthread_mutex_unlock(&pThis->Mutex); 404 AssertMsg(!rc, ("Failed to unlock event sem %p, rc=%d.\n", EventSem, rc)); NOREF(rc);415 AssertMsg(!rc, ("Failed to unlock event sem %p, rc=%d.\n", hEventSem, rc)); NOREF(rc); 405 416 return VINF_SUCCESS; 406 417 } … … 408 419 { 409 420 rc = pthread_mutex_unlock(&pThis->Mutex); 410 AssertMsg(!rc, ("Failed to unlock event sem %p, rc=%d.\n", EventSem, rc)); NOREF(rc);421 AssertMsg(!rc, ("Failed to unlock event sem %p, rc=%d.\n", hEventSem, rc)); NOREF(rc); 411 422 return VERR_SEM_DESTROYED; 412 423 } … … 442 453 if (rc && (rc != EINTR || !fAutoResume)) /* according to SuS this function shall not return EINTR, but linux man page says differently. */ 443 454 { 444 AssertMsg(rc == ETIMEDOUT, ("Failed to wait on event sem %p, rc=%d.\n", EventSem, rc));455 AssertMsg(rc == ETIMEDOUT, ("Failed to wait on event sem %p, rc=%d.\n", hEventSem, rc)); 445 456 ASMAtomicDecU32(&pThis->cWaiters); 446 457 int rc2 = pthread_mutex_unlock(&pThis->Mutex); 447 AssertMsg(!rc2, ("Failed to unlock event sem %p, rc2=%d.\n", EventSem, rc2)); NOREF(rc2);458 AssertMsg(!rc2, ("Failed to unlock event sem %p, rc2=%d.\n", hEventSem, rc2)); NOREF(rc2); 448 459 return RTErrConvertFromErrno(rc); 449 460 } … … 453 464 454 465 455 RTDECL(int) RTSemEventWait(RTSEMEVENT EventSem, unsigned cMillies)456 { 457 int rc = rtSemEventWait( EventSem, cMillies, true);466 RTDECL(int) RTSemEventWait(RTSEMEVENT hEventSem, unsigned cMillies) 467 { 468 int rc = rtSemEventWait(hEventSem, cMillies, true); 458 469 Assert(rc != VERR_INTERRUPTED); 459 470 return rc; … … 461 472 462 473 463 RTDECL(int) RTSemEventWaitNoResume(RTSEMEVENT EventSem, unsigned cMillies)464 { 465 return rtSemEventWait( EventSem, cMillies, false);474 RTDECL(int) RTSemEventWaitNoResume(RTSEMEVENT hEventSem, unsigned cMillies) 475 { 476 return rtSemEventWait(hEventSem, cMillies, false); 466 477 } 467 478
Note:
See TracChangeset
for help on using the changeset viewer.