- Timestamp:
- Jun 9, 2010 12:31:50 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/asm.h
r30111 r30112 2416 2416 * Atomically writes a pointer value, ordered. 2417 2417 * 2418 * @returns Current *pv value2419 2418 * @param ppv Pointer to the pointer variable. 2420 2419 * @param pv The pointer value to assign to *ppv. … … 2433 2432 2434 2433 /** 2435 * Convenience macro for avoiding the annoying casting with ASMAtomicWritePtr. 2436 * 2437 * @returns Current *pv value 2434 * Atomically writes a pointer value, ordered. 2435 * 2438 2436 * @param ppv Pointer to the pointer variable. 2439 * @param pv The pointer value to assign to *ppv. If NULL , you may have2440 * to cast it to the right pointer type for GCC to be happy.2437 * @param pv The pointer value to assign to *ppv. If NULL use 2438 * ASMAtomicWriteNullPtr or you'll land in trouble. 2441 2439 * 2442 2440 * @remarks This is relatively type safe on GCC platforms when @a pv isn't … … 2470 2468 2471 2469 /** 2472 * Convenience macro for avoiding the annoying casting involved when using 2473 * ASMAtomicWritePtr. 2470 * Atomically sets a pointer to NULL, ordered. 2471 * 2472 * @param ppv Pointer to the pointer variable that should be set to NULL. 2473 * 2474 * @remarks This is relatively type safe on GCC platforms. 2475 */ 2476 #ifdef __GNUC__ 2477 # define ASMAtomicWriteNullPtr(ppv) \ 2478 do \ 2479 { \ 2480 __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ 2481 AssertCompile(sizeof(*ppv) == sizeof(void *)); \ 2482 Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ 2483 ASMAtomicWritePtrVoid((void * volatile *)(ppvTypeChecked), NULL); \ 2484 } while (0) 2485 #else 2486 # define ASMAtomicWriteNullPtr(ppv) \ 2487 do \ 2488 { \ 2489 AssertCompile(sizeof(*ppv) == sizeof(void *)); \ 2490 Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ 2491 ASMAtomicWritePtrVoid((void * volatile *)(ppv), NULL); \ 2492 } while (0) 2493 #endif 2494 2495 2496 /** 2497 * Atomically writes a pointer value, unordered. 2474 2498 * 2475 2499 * @returns Current *pv value 2476 2500 * @param ppv Pointer to the pointer variable. 2477 * @param pv The pointer value to assign to *ppv. 2501 * @param pv The pointer value to assign to *ppv. If NULL use 2502 * ASMAtomicUoWriteNullPtr or you'll land in trouble. 2478 2503 * 2479 2504 * @remarks This is relatively type safe on GCC platforms when @a pv isn't … … 2501 2526 Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ 2502 2527 *(ppv) = pv; \ 2528 } while (0) 2529 #endif 2530 2531 2532 /** 2533 * Atomically sets a pointer to NULL, unordered. 2534 * 2535 * @param ppv Pointer to the pointer variable that should be set to NULL. 2536 * 2537 * @remarks This is relatively type safe on GCC platforms. 2538 */ 2539 #ifdef __GNUC__ 2540 # define ASMAtomicUoWriteNullPtr(ppv) \ 2541 do \ 2542 { \ 2543 __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ 2544 AssertCompile(sizeof(*ppv) == sizeof(void *)); \ 2545 Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ 2546 *(ppvTypeChecked) = NULL; \ 2547 } while (0) 2548 #else 2549 # define ASMAtomicUoWriteNullPtr(ppv) \ 2550 do \ 2551 { \ 2552 AssertCompile(sizeof(*ppv) == sizeof(void *)); \ 2553 Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ 2554 *(ppv) = NULL; \ 2503 2555 } while (0) 2504 2556 #endif -
trunk/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp
r30111 r30112 490 490 Assert(pReqActive->pIoReq == pIoReq); 491 491 492 ASMAtomicWrite Ptr(&pReqActive->pIoReq, NULL);492 ASMAtomicWriteNullPtr(&pReqActive->pIoReq); 493 493 } 494 494 -
trunk/src/VBox/HostDrivers/Support/SUPLib.cpp
r30111 r30112 508 508 if (g_pSUPGlobalInfoPage) 509 509 { 510 ASMAtomicWrite Ptr((void * volatile *)&g_pSUPGlobalInfoPage, NULL);511 ASMAtomicWrite Ptr((void * volatile *)&g_pSUPGlobalInfoPageR0, NULL);510 ASMAtomicWriteNullPtr((void * volatile *)&g_pSUPGlobalInfoPage); 511 ASMAtomicWriteNullPtr((void * volatile *)&g_pSUPGlobalInfoPageR0); 512 512 ASMAtomicWriteSize(&g_HCPhysSUPGlobalInfoPage, NIL_RTHCPHYS); 513 513 /* just a little safe guard against threads using the page. */ -
trunk/src/VBox/HostDrivers/Support/SUPSvcGrant.cpp
r30111 r30112 975 975 unsigned cSessions = 0; 976 976 for (PSUPSVCGRANTSESSION pCur = pThis->pSessionHead; pCur; pCur = pCur->pNext) 977 ASMAtomicWrite Ptr(&pCur->pParent, NULL);977 ASMAtomicWriteNullPtr(&pCur->pParent); 978 978 979 979 RTCritSectLeave(&pThis->CritSect); -
trunk/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp
r30111 r30112 669 669 int cPromisc = VALID_PTR(pIfNet) ? VBOX_GET_PCOUNT(pIfNet) : - 1; 670 670 671 ASMAtomicUoWrite Ptr(&pThis->u.s.pIfNet, NULL);672 ASMAtomicUoWrite Ptr(&pThis->u.s.pIfFilter, NULL);671 ASMAtomicUoWriteNullPtr(&pThis->u.s.pIfNet); 672 ASMAtomicUoWriteNullPtr(&pThis->u.s.pIfFilter); 673 673 ASMAtomicWriteBool(&pThis->u.s.fNeedSetPromiscuous, false); 674 674 pThis->u.s.fSetPromiscuous = false; … … 1164 1164 pIfFilter = ASMAtomicUoReadPtrT(&pThis->u.s.pIfFilter, interface_filter_t); 1165 1165 if (pIfFilter) 1166 ASMAtomicUoWrite Ptr(&pThis->u.s.pIfFilter, NULL);1166 ASMAtomicUoWriteNullPtr(&pThis->u.s.pIfFilter); 1167 1167 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); 1168 1168 -
trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
r30111 r30112 651 651 pPriv = qdisc_priv(pQdisc); 652 652 Assert(pPriv->pVBoxNetFlt == pThis); 653 ASMAtomicWrite Ptr(&pPriv->pVBoxNetFlt, NULL);653 ASMAtomicWriteNullPtr(&pPriv->pVBoxNetFlt); 654 654 655 655 QDISC_LOG(("vboxNetFltLinuxQdiscRemove: refcnt=%d num_tx_queues=%d\n", … … 1946 1946 #endif /* VBOXNETFLT_WITH_QDISC */ 1947 1947 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 1948 ASMAtomicUoWrite Ptr(&pThis->u.s.pDev, NULL);1948 ASMAtomicUoWriteNullPtr(&pThis->u.s.pDev); 1949 1949 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); 1950 1950 dev_put(pDev); … … 1973 1973 ASMAtomicWriteBool(&pThis->u.s.fRegistered, false); 1974 1974 ASMAtomicWriteBool(&pThis->fDisconnectedFromHost, true); 1975 ASMAtomicUoWrite Ptr(&pThis->u.s.pDev, NULL);1975 ASMAtomicUoWriteNullPtr(&pThis->u.s.pDev); 1976 1976 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); 1977 1977 -
trunk/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
r30111 r30112 924 924 RTTimerStop(pPromiscStream->pIp6Timer); 925 925 RTTimerDestroy(pPromiscStream->pIp6Timer); 926 ASMAtomicUoWrite Ptr(&pPromiscStream->pIp6Timer, NULL);926 ASMAtomicUoWriteNullPtr(&pPromiscStream->pIp6Timer); 927 927 } 928 928 #endif … … 944 944 switch (pStream->Type) 945 945 { 946 case kIp4Stream: ASMAtomicUoWrite Ptr(pStream->pThis->u.s.pvIp4Stream, NULL); break;947 case kIp6Stream: ASMAtomicUoWrite Ptr(pStream->pThis->u.s.pvIp6Stream, NULL); break;948 case kArpStream: ASMAtomicUoWrite Ptr(pStream->pThis->u.s.pvArpStream, NULL); break;949 case kPromiscStream: ASMAtomicUoWrite Ptr(pStream->pThis->u.s.pvPromiscStream, NULL); break;946 case kIp4Stream: ASMAtomicUoWriteNullPtr(pStream->pThis->u.s.pvIp4Stream); break; 947 case kIp6Stream: ASMAtomicUoWriteNullPtr(pStream->pThis->u.s.pvIp6Stream); break; 948 case kArpStream: ASMAtomicUoWriteNullPtr(pStream->pThis->u.s.pvArpStream); break; 949 case kPromiscStream: ASMAtomicUoWriteNullPtr(pStream->pThis->u.s.pvPromiscStream); break; 950 950 default: /* Heh. */ 951 951 { … … 2578 2578 RTTimerStop(pPromiscStream->pIp6Timer); 2579 2579 RTTimerDestroy(pPromiscStream->pIp6Timer); 2580 ASMAtomicUoWrite Ptr(&pPromiscStream->pIp6Timer, NULL);2580 ASMAtomicUoWriteNullPtr(&pPromiscStream->pIp6Timer); 2581 2581 } 2582 2582 #endif -
trunk/src/VBox/Main/ConsoleImpl.cpp
r30111 r30112 8123 8123 unsigned iLed = pData->iLastLUN - pData->iFirstLUN + 1; 8124 8124 while (iLed-- > 0) 8125 ASMAtomicWrite Ptr(&pData->papLeds[iLed], NULL);8125 ASMAtomicWriteNullPtr(&pData->papLeds[iLed]); 8126 8126 } 8127 8127 } -
trunk/src/VBox/Runtime/common/log/log.cpp
r30111 r30112 1905 1905 || g_aPerThreadLoggers[i].uKey == uKey) 1906 1906 { 1907 ASMAtomicWrite Ptr((void * volatile *)&g_aPerThreadLoggers[i].uKey, (void *)NULL);1908 ASMAtomicWrite Ptr(&g_aPerThreadLoggers[i].pLogger, (PRTLOGGER)NULL);1907 ASMAtomicWriteNullPtr((void * volatile *)&g_aPerThreadLoggers[i].uKey); 1908 ASMAtomicWriteNullPtr(&g_aPerThreadLoggers[i].pLogger); 1909 1909 ASMAtomicWriteHandle(&g_aPerThreadLoggers[i].NativeThread, NIL_RTNATIVETHREAD); 1910 1910 ASMAtomicDecS32(&g_cPerThreadLoggers); -
trunk/src/VBox/Runtime/common/misc/lockvalidator.cpp
r30111 r30112 827 827 { 828 828 ASMAtomicUoWriteU32(&pDst->uLine, 0); 829 ASMAtomicUoWrite Ptr(&pDst->pszFile, NULL);830 ASMAtomicUoWrite Ptr(&pDst->pszFunction, NULL);829 ASMAtomicUoWriteNullPtr(&pDst->pszFile); 830 ASMAtomicUoWriteNullPtr(&pDst->pszFunction); 831 831 ASMAtomicUoWritePtr(&pDst->uId, (RTHCUINTPTR)0); 832 832 } … … 3472 3472 { 3473 3473 PRTLOCKVALRECSHRDOWN volatile *papOwners = pRec->papOwners; 3474 ASMAtomicUoWrite Ptr(&pRec->papOwners, NULL);3474 ASMAtomicUoWriteNullPtr(&pRec->papOwners); 3475 3475 ASMAtomicUoWriteU32(&pRec->cAllocated, 0); 3476 3476 -
trunk/src/VBox/Runtime/common/misc/thread.cpp
r30111 r30112 1349 1349 if ( pThread->LockValidator.pRec 1350 1350 && pThread->LockValidator.enmRecState == enmCurState) 1351 ASMAtomicWrite Ptr(&pThread->LockValidator.pRec, NULL);1351 ASMAtomicWriteNullPtr(&pThread->LockValidator.pRec); 1352 1352 } 1353 1353 /* This is a bit ugly... :-/ */ … … 1355 1355 || enmActualState == RTTHREADSTATE_INITIALIZING) 1356 1356 && pThread->LockValidator.pRec) 1357 ASMAtomicWrite Ptr(&pThread->LockValidator.pRec, NULL);1357 ASMAtomicWriteNullPtr(&pThread->LockValidator.pRec); 1358 1358 Assert( pThread->LockValidator.pRec == NULL 1359 1359 || RTTHREAD_IS_SLEEPING(enmActualState)); … … 1441 1441 PRTTHREADINT pThread = (PRTTHREADINT)pNode; 1442 1442 RTTLS iTls = (RTTLS)(uintptr_t)pvUser; 1443 ASMAtomicWrite Ptr(&pThread->apvTlsEntries[iTls], NULL);1443 ASMAtomicWriteNullPtr(&pThread->apvTlsEntries[iTls]); 1444 1444 return 0; 1445 1445 } -
trunk/src/VBox/Runtime/generic/tls-generic.cpp
r30111 r30112 89 89 return VERR_INVALID_PARAMETER; 90 90 91 ASMAtomicWrite Ptr(&g_apfnDestructors[iTls], NULL);91 ASMAtomicWriteNullPtr(&g_apfnDestructors[iTls]); 92 92 rtThreadClearTlsEntry(iTls); 93 93 ASMAtomicBitClear(&g_au32AllocatedBitmap[0], iTls); -
trunk/src/VBox/Runtime/r3/posix/fileaio-posix.cpp
r30111 r30112 493 493 AssertRC(rc); 494 494 495 ASMAtomicWrite Ptr(&pCtxInt->pReqToCancel, NULL);495 ASMAtomicWriteNullPtr(&pCtxInt->pReqToCancel); 496 496 pReqInt->Rc = VERR_FILE_AIO_CANCELED; 497 497 RTFILEAIOREQ_SET_STATE(pReqInt, COMPLETED); -
trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp
r30111 r30112 1067 1067 pHandle->iNext = pGVMM->iFreeHead; 1068 1068 pGVMM->iFreeHead = iHandle; 1069 ASMAtomicWrite Ptr(&pHandle->pGVM, (PGVM)NULL);1070 ASMAtomicWrite Ptr(&pHandle->pVM, (PVM)NULL);1071 ASMAtomicWrite Ptr(&pHandle->pvObj, (void *)NULL);1072 ASMAtomicWrite Ptr(&pHandle->pSession, (PSUPDRVSESSION)NULL);1069 ASMAtomicWriteNullPtr(&pHandle->pGVM); 1070 ASMAtomicWriteNullPtr(&pHandle->pVM); 1071 ASMAtomicWriteNullPtr(&pHandle->pvObj); 1072 ASMAtomicWriteNullPtr(&pHandle->pSession); 1073 1073 ASMAtomicWriteSize(&pHandle->hEMT0, NIL_RTNATIVETHREAD); 1074 1074 ASMAtomicWriteSize(&pHandle->ProcId, NIL_RTPROCESS); -
trunk/src/VBox/VMM/VMReq.cpp
r30111 r30112 490 490 if (ASMAtomicCmpXchgPtr(ppHead, pHead, pList)) 491 491 return; 492 ASMAtomicWrite Ptr(&pTail->pNext, NULL);492 ASMAtomicWriteNullPtr(&pTail->pNext); 493 493 ASMCompilerBarrier(); 494 494 if (ASMAtomicCmpXchgPtr(ppHead, pHead, NULL)) … … 1009 1009 pReqRet = pReqRet->pNext; 1010 1010 } while (pReqRet->pNext); 1011 ASMAtomicWrite Ptr(&pPrev->pNext, NULL);1011 ASMAtomicWriteNullPtr(&pPrev->pNext); 1012 1012 1013 1013 /* Push the others back onto the list (end of it). */
Note:
See TracChangeset
for help on using the changeset viewer.