本文整理汇总了C++中ASMAtomicDecU32函数的典型用法代码示例。如果您正苦于以下问题:C++ ASMAtomicDecU32函数的具体用法?C++ ASMAtomicDecU32怎么用?C++ ASMAtomicDecU32使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ASMAtomicDecU32函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: RTDECL
RTDECL(int) RTPipeRead(RTPIPE hPipe, void *pvBuf, size_t cbToRead, size_t *pcbRead)
{
RTPIPEINTERNAL *pThis = hPipe;
AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
AssertReturn(pThis->u32Magic == RTPIPE_MAGIC, VERR_INVALID_HANDLE);
AssertReturn(pThis->fRead, VERR_ACCESS_DENIED);
AssertPtr(pcbRead);
AssertPtr(pvBuf);
int rc = rtPipeTryNonBlocking(pThis);
if (RT_SUCCESS(rc))
{
ssize_t cbRead = read(pThis->fd, pvBuf, RT_MIN(cbToRead, SSIZE_MAX));
if (cbRead >= 0)
{
if (cbRead || !cbToRead || !rtPipePosixHasHup(pThis))
*pcbRead = cbRead;
else
rc = VERR_BROKEN_PIPE;
}
else if (errno == EAGAIN)
{
*pcbRead = 0;
rc = VINF_TRY_AGAIN;
}
else
rc = RTErrConvertFromErrno(errno);
ASMAtomicDecU32(&pThis->u32State);
}
return rc;
}
开发者ID:greg100795,项目名称:virtualbox,代码行数:32,代码来源:pipe-posix.cpp
示例2: LogFlowThisFunc
/**
* Uninitializes the instance and sets the ready flag to FALSE.
* Called either from FinalRelease() or by the parent when it gets destroyed.
*/
void VirtualBoxClient::uninit()
{
LogFlowThisFunc(("\n"));
/* Enclose the state transition Ready->InUninit->NotReady */
AutoUninitSpan autoUninitSpan(this);
if (autoUninitSpan.uninitDone())
return;
if (mData.m_ThreadWatcher != NIL_RTTHREAD)
{
/* Signal the event semaphore and wait for the thread to terminate.
* if it hangs for some reason exit anyway, this can cause a crash
* though as the object will no longer be available. */
RTSemEventSignal(mData.m_SemEvWatcher);
RTThreadWait(mData.m_ThreadWatcher, 30000, NULL);
mData.m_ThreadWatcher = NIL_RTTHREAD;
RTSemEventDestroy(mData.m_SemEvWatcher);
mData.m_SemEvWatcher = NIL_RTSEMEVENT;
}
mData.m_pVirtualBox.setNull();
ASMAtomicDecU32(&g_cInstances);
}
开发者ID:MadHacker217,项目名称:VirtualBox-OSE,代码行数:29,代码来源:VirtualBoxClientImpl.cpp
示例3: vboxVhwaHlpCheckTerm
int vboxVhwaHlpCheckTerm(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId)
{
Assert(VidPnSourceId < (D3DDDI_VIDEO_PRESENT_SOURCE_ID)VBoxCommonFromDeviceExt(pDevExt)->cDisplays);
if (VidPnSourceId >= (D3DDDI_VIDEO_PRESENT_SOURCE_ID)VBoxCommonFromDeviceExt(pDevExt)->cDisplays)
return VERR_INVALID_PARAMETER;
PVBOXWDDM_SOURCE pSource = &pDevExt->aSources[VidPnSourceId];
Assert(!!(pSource->Vhwa.Settings.fFlags & VBOXVHWA_F_ENABLED));
/** @todo need a better sync */
uint32_t cNew = ASMAtomicDecU32(&pSource->Vhwa.cOverlaysCreated);
int rc = VINF_SUCCESS;
if (!cNew)
{
rc = vboxVhwaHlpDestroyPrimary(pDevExt, pSource, VidPnSourceId);
AssertRC(rc);
}
else
{
Assert(cNew < UINT32_MAX / 2);
}
return rc;
}
开发者ID:jbremer,项目名称:virtualbox,代码行数:25,代码来源:VBoxMPVhwa.cpp
示例4: RTDECL
RTDECL(int) RTPipeWrite(RTPIPE hPipe, const void *pvBuf, size_t cbToWrite, size_t *pcbWritten)
{
RTPIPEINTERNAL *pThis = hPipe;
AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
AssertReturn(pThis->u32Magic == RTPIPE_MAGIC, VERR_INVALID_HANDLE);
AssertReturn(!pThis->fRead, VERR_ACCESS_DENIED);
AssertPtr(pcbWritten);
AssertPtr(pvBuf);
int rc = rtPipeTryNonBlocking(pThis);
if (RT_SUCCESS(rc))
{
if (cbToWrite)
{
ssize_t cbWritten = write(pThis->fd, pvBuf, RT_MIN(cbToWrite, SSIZE_MAX));
if (cbWritten >= 0)
*pcbWritten = cbWritten;
else if (errno == EAGAIN)
{
*pcbWritten = 0;
rc = VINF_TRY_AGAIN;
}
else
rc = RTErrConvertFromErrno(errno);
}
else
*pcbWritten = 0;
ASMAtomicDecU32(&pThis->u32State);
}
return rc;
}
开发者ID:sobomax,项目名称:virtualbox_64bit_edd,代码行数:32,代码来源:pipe-posix.cpp
示例5: RTDECL
RTDECL(int) RTSemMutexDestroy(RTSEMMUTEX hMutexSem)
{
/*
* Validate input.
*/
PRTSEMMUTEXINTERNAL pThis = (PRTSEMMUTEXINTERNAL)hMutexSem;
if (!pThis)
return VERR_INVALID_PARAMETER;
AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
AssertMsgReturn(pThis->u32Magic == RTSEMMUTEX_MAGIC, ("u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE);
RT_ASSERT_INTS_ON();
/*
* Kill it, wake up all waiting threads and release the reference.
*/
AssertReturn(ASMAtomicCmpXchgU32(&pThis->u32Magic, ~RTSEMMUTEX_MAGIC, RTSEMMUTEX_MAGIC), VERR_INVALID_HANDLE);
lck_spin_lock(pThis->pSpinlock);
if (pThis->cWaiters > 0)
thread_wakeup_prim((event_t)pThis, FALSE /* one_thread */, THREAD_RESTART);
if (ASMAtomicDecU32(&pThis->cRefs) == 0)
rtSemMutexDarwinFree(pThis);
else
lck_spin_unlock(pThis->pSpinlock);
return VINF_SUCCESS;
}
开发者ID:bayasist,项目名称:vbox,代码行数:28,代码来源:semmutex-r0drv-darwin.cpp
示例6: DECLINLINE
/**
* Releases a reference to a RTMPNTONSPECIFICARGS heap allocation, freeing it
* when the last reference is released.
*/
DECLINLINE(void) rtMpNtOnSpecificRelease(PRTMPNTONSPECIFICARGS pArgs)
{
uint32_t cRefs = ASMAtomicDecU32(&pArgs->cRefs);
AssertMsg(cRefs <= 1, ("cRefs=%#x\n", cRefs));
if (cRefs == 0)
ExFreePool(pArgs);
}
开发者ID:mcenirm,项目名称:vbox,代码行数:11,代码来源:mp-r0drv-nt.cpp
示例7: DECLINLINE
/**
* Release a reference, destroy the thing if necessary.
*
* @param pThis The semaphore.
*/
DECLINLINE(void) rtR0SemEventMultiHkuRelease(PRTSEMEVENTMULTIINTERNAL pThis)
{
if (RT_UNLIKELY(ASMAtomicDecU32(&pThis->cRefs) == 0))
{
Assert(pThis->u32Magic != RTSEMEVENTMULTI_MAGIC);
RTMemFree(pThis);
}
}
开发者ID:mdaniel,项目名称:virtualbox-org-svn-vbox-trunk,代码行数:13,代码来源:semeventmulti-r0drv-haiku.c
示例8: i_release
uint32_t i_release()
{
uint32_t cRefs = ASMAtomicDecU32(&m_cRefs);
Assert(cRefs < _1K);
if (cRefs == 0)
delete this;
return cRefs;
}
开发者ID:mdaniel,项目名称:virtualbox-org-svn-vbox-trunk,代码行数:8,代码来源:VirtualBoxSDSImpl.cpp
示例9: VBoxDispVHWACommandRelease
void VBoxDispVHWACommandRelease(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd)
{
uint32_t cRefs = ASMAtomicDecU32(&pCmd->cRefs);
Assert(cRefs < UINT32_MAX / 2);
if(!cRefs)
{
VBoxDispVHWACommandFree(pDev, pCmd);
}
}
开发者ID:egraba,项目名称:vbox_openbsd,代码行数:9,代码来源:VBoxDispVHWA.cpp
示例10: renderspuContextRelease
static uint32_t renderspuContextRelease( ContextInfo *context )
{
uint32_t cRefs = ASMAtomicDecU32(&context->cRefs);
if (!cRefs)
renderspuDestroyContextTerminate( context );
else
CRASSERT(cRefs < UINT32_MAX/2);
return cRefs;
}
开发者ID:apaka,项目名称:vbox,代码行数:9,代码来源:renderspu.c
示例11: vboxVhwaHlpOverlayListRemove
static void vboxVhwaHlpOverlayListRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_OVERLAY pOverlay)
{
PVBOXWDDM_SOURCE pSource = &pDevExt->aSources[pOverlay->VidPnSourceId];
KIRQL OldIrql;
KeAcquireSpinLock(&pSource->OverlayListLock, &OldIrql);
ASMAtomicDecU32(&pSource->cOverlays);
RemoveEntryList(&pOverlay->ListEntry);
KeReleaseSpinLock(&pSource->OverlayListLock, OldIrql);
}
开发者ID:LastRitter,项目名称:vbox-haiku,代码行数:9,代码来源:VBoxMPVhwa.cpp
示例12: DECLINLINE
/**
* Release a reference, destroy the thing if necessary.
*
* @param pThis The semaphore.
*/
DECLINLINE(void) rtR0SemEventMultiDarwinRelease(PRTSEMEVENTMULTIINTERNAL pThis)
{
if (RT_UNLIKELY(ASMAtomicDecU32(&pThis->cRefs) == 0))
{
Assert(pThis->u32Magic != RTSEMEVENTMULTI_MAGIC);
lck_spin_destroy(pThis->pSpinlock, g_pDarwinLockGroup);
RTMemFree(pThis);
}
}
开发者ID:MadHacker217,项目名称:VirtualBox-OSE,代码行数:14,代码来源:semeventmulti-r0drv-darwin.cpp
示例13: DECLINLINE
DECLINLINE(void) vbvaVhwaCommandRelease(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD* pCmd)
{
uint32_t cRefs = ASMAtomicDecU32(&pCmd->cRefs);
Assert(cRefs < UINT32_MAX / 2);
if(!cRefs)
{
VBoxHGSMIBufferFree(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, pCmd);
}
}
开发者ID:LastRitter,项目名称:vbox-haiku,代码行数:9,代码来源:VBoxMPVhwa.cpp
示例14: DECLINLINE
DECLINLINE(VOID) vboxWddmSwapchainRelease(PVBOXWDDM_SWAPCHAIN pSwapchain)
{
const uint32_t cRefs = ASMAtomicDecU32(&pSwapchain->cRefs);
Assert(cRefs < UINT32_MAX/2);
if (!cRefs)
{
vboxWddmMemFree(pSwapchain);
}
}
开发者ID:LastRitter,项目名称:vbox-haiku,代码行数:9,代码来源:VBoxMPMisc.cpp
示例15: rtThreadRemoveLocked
/**
* Removes the thread from the AVL tree, call owns the tree lock
* and has cleared the RTTHREADINT_FLAG_IN_TREE bit.
*
* @param pThread The thread to remove.
*/
static void rtThreadRemoveLocked(PRTTHREADINT pThread)
{
PRTTHREADINT pThread2 = (PRTTHREADINT)RTAvlPVRemove(&g_ThreadTree, pThread->Core.Key);
#if !defined(RT_OS_OS2) /** @todo this asserts for threads created by NSPR */
AssertMsg(pThread2 == pThread, ("%p(%s) != %p (%p/%s)\n", pThread2, pThread2 ? pThread2->szName : "<null>",
pThread, pThread->Core.Key, pThread->szName));
#endif
if (pThread2)
ASMAtomicDecU32(&g_cThreadInTree);
}
开发者ID:svn2github,项目名称:virtualbox,代码行数:16,代码来源:thread.cpp
示例16: RTDECL
RTDECL(int) RTSemMutexRelease(RTSEMMUTEX hMutexSem)
{
/*
* Validate input.
*/
struct RTSEMMUTEXINTERNAL *pThis = hMutexSem;
AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
AssertReturn(pThis->u32Magic == RTSEMMUTEX_MAGIC, VERR_INVALID_HANDLE);
#ifdef RTSEMMUTEX_STRICT
int rc9 = RTLockValidatorRecExclReleaseOwner(&pThis->ValidatorRec, pThis->cNestings == 1);
if (RT_FAILURE(rc9))
return rc9;
#endif
/*
* Check if nested.
*/
pthread_t Self = pthread_self();
if (RT_UNLIKELY( pThis->Owner != Self
|| pThis->cNestings == 0))
{
AssertMsgFailed(("Not owner of mutex %p!! Self=%08x Owner=%08x cNestings=%d\n",
pThis, Self, pThis->Owner, pThis->cNestings));
return VERR_NOT_OWNER;
}
/*
* If nested we'll just pop a nesting.
*/
if (pThis->cNestings > 1)
{
ASMAtomicDecU32(&pThis->cNestings);
return VINF_SUCCESS;
}
/*
* Clear the state. (cNestings == 1)
*/
pThis->Owner = (pthread_t)~0;
ASMAtomicWriteU32(&pThis->cNestings, 0);
/*
* Release the mutex.
*/
int32_t iNew = ASMAtomicDecS32(&pThis->iState);
if (RT_UNLIKELY(iNew != 0))
{
/* somebody is waiting, try wake up one of them. */
ASMAtomicXchgS32(&pThis->iState, 0);
(void)sys_futex(&pThis->iState, FUTEX_WAKE, 1, NULL, NULL, 0);
}
return VINF_SUCCESS;
}
开发者ID:miguelinux,项目名称:vbox,代码行数:54,代码来源:semmutex-linux.cpp
示例17: rtDbgModDeferredReleaseInstanceData
/**
* Releases the instance data.
*
* @param pThis The instance data.
*/
static void rtDbgModDeferredReleaseInstanceData(PRTDBGMODDEFERRED pThis)
{
AssertPtr(pThis);
uint32_t cRefs = ASMAtomicDecU32(&pThis->cRefs); Assert(cRefs < 8);
if (!cRefs)
{
RTDbgCfgRelease(pThis->hDbgCfg);
pThis->hDbgCfg = NIL_RTDBGCFG;
RTMemFree(pThis);
}
}
开发者ID:sobomax,项目名称:virtualbox_64bit_edd,代码行数:16,代码来源:dbgmoddeferred.cpp
示例18: VBoxDrvFreeBSDDtr
/**
* Close a file device previously opened by VBoxDrvFreeBSDOpen
*
* @returns 0 on success.
* @param pDev The device.
* @param fFile The file descriptor flags.
* @param DevType The device type (CHR.
* @param pTd The calling thread.
*/
static void VBoxDrvFreeBSDDtr(void *pData)
{
PSUPDRVSESSION pSession = pData;
Log(("VBoxDrvFreeBSDDtr: pSession=%p\n", pSession));
/*
* Close the session.
*/
supdrvSessionRelease(pSession);
ASMAtomicDecU32(&g_cUsers);
}
开发者ID:stefano-garzarella,项目名称:virtualbox-org-svn-vbox-trunk,代码行数:20,代码来源:SUPDrv-freebsd.c
示例19: ASMAtomicDecU32
uint32_t SecretKey::release()
{
uint32_t cRefs = ASMAtomicDecU32(&m_cRefs);
if (!cRefs)
{
int rc = RTMemSaferScramble(m_pbKey, m_cbKey);
AssertRC(rc);
}
return cRefs;
}
开发者ID:zBMNForks,项目名称:virtualbox-org-svn-vbox-trunk,代码行数:11,代码来源:SecretKeyStore.cpp
示例20: RTDECL
/**
* Release a reference to the module.
*
* When the reference count reaches zero, the module is destroyed.
*
* @returns New reference count, UINT32_MAX on invalid handle (asserted).
*
* @param hDbgMod The module handle. The NIL handle is quietly ignored
* and 0 is returned.
*
* @remarks Will not take any locks.
*/
RTDECL(uint32_t) RTDbgModRelease(RTDBGMOD hDbgMod)
{
if (hDbgMod == NIL_RTDBGMOD)
return 0;
PRTDBGMODINT pDbgMod = hDbgMod;
RTDBGMOD_VALID_RETURN_RC(pDbgMod, UINT32_MAX);
uint32_t cRefs = ASMAtomicDecU32(&pDbgMod->cRefs);
if (!cRefs)
rtDbgModDestroy(pDbgMod);
return cRefs;
}
开发者ID:virendramishra,项目名称:VirtualBox4.1.18,代码行数:24,代码来源:dbgmod.cpp
注:本文中的ASMAtomicDecU32函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论