VirtualBox

Changeset 21549 in vbox for trunk/src/VBox/Runtime/common


Ignore:
Timestamp:
Jul 13, 2009 4:28:52 PM (16 years ago)
Author:
vboxsync
Message:

iprt/log.h: Use the spinning mutexes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/log/log.cpp

    r21396 r21549  
    198198 * Locks the logger instance.
    199199 *
    200  * @returns See RTSemFastMutexRequest().
     200 * @returns See RTSemSpinMutexRequest().
    201201 * @param   pLogger     The logger instance.
    202202 */
     
    204204{
    205205#ifndef IN_RC
    206     if (pLogger->MutexSem != NIL_RTSEMFASTMUTEX)
    207     {
    208         int rc;
    209 # if defined(IN_RING0) \
    210   && (defined(RT_OS_WINDOWS) || defined(RT_OS_SOLARIS) || defined(RT_OS_LINUX))
    211         if (!RTThreadPreemptIsEnabled(NIL_RTTHREAD))
    212             return VERR_PREEMPT_DISABLED;
    213 # endif
    214         rc = RTSemFastMutexRequest(pLogger->MutexSem);
     206    if (pLogger->hSpinMtx != NIL_RTSEMSPINMUTEX)
     207    {
     208        int rc = RTSemSpinMutexRequest(pLogger->hSpinMtx);
    215209        if (RT_FAILURE(rc))
    216210            return rc;
     
    228222{
    229223#ifndef IN_RC
    230     if (pLogger->MutexSem != NIL_RTSEMFASTMUTEX)
    231         RTSemFastMutexRelease(pLogger->MutexSem);
     224    if (pLogger->hSpinMtx != NIL_RTSEMFASTMUTEX)
     225        RTSemSpinMutexRelease(pLogger->hSpinMtx);
    232226#endif
    233227    return;
     
    407401            if (RT_SUCCESS(rc))
    408402            {
    409                 rc = RTSemFastMutexCreate(&pLogger->MutexSem);
     403                rc = RTSemSpinMutexCreate(&pLogger->hSpinMtx, RTSEMSPINMUTEX_FLAGS_IRQ_SAFE);
    410404                if (RT_SUCCESS(rc))
    411405                {
     
    415409                    {
    416410                        int32_t c = RTThreadGetWriteLockCount(Thread);
    417                         RTSemFastMutexRequest(pLogger->MutexSem);
     411                        RTSemSpinMutexRequest(pLogger->hSpinMtx);
    418412                        c = RTThreadGetWriteLockCount(Thread) - c;
    419                         RTSemFastMutexRelease(pLogger->MutexSem);
     413                        RTSemSpinMutexRelease(pLogger->hSpinMtx);
    420414                        ASMAtomicWriteU32(&g_cLoggerLockCount, c);
    421415                    }
     
    528522RTDECL(int) RTLogDestroy(PRTLOGGER pLogger)
    529523{
    530     int            rc;
    531     uint32_t       iGroup;
    532     RTSEMFASTMUTEX MutexSem;
     524    int             rc;
     525    uint32_t        iGroup;
     526    RTSEMSPINMUTEX  hSpinMtx;
    533527
    534528    /*
     
    544538     */
    545539    rc = rtlogLock(pLogger);
    546     AssertMsgReturn(RT_SUCCESS(rc) || rc == VERR_PREEMPT_DISABLED, ("%Rrc\n", rc), rc);
     540    AssertMsgRCReturn(rc, ("%Rrc\n", rc), rc);
    547541
    548542    pLogger->fFlags |= RTLOGFLAGS_DISABLED;
     
    573567     * Free the mutex, the wrapper and the instance memory.
    574568     */
    575     MutexSem = pLogger->MutexSem;
    576     pLogger->MutexSem = NIL_RTSEMFASTMUTEX;
    577     if (MutexSem != NIL_RTSEMFASTMUTEX)
     569    hSpinMtx = pLogger->hSpinMtx;
     570    pLogger->hSpinMtx = NIL_RTSEMSPINMUTEX;
     571    if (hSpinMtx != NIL_RTSEMSPINMUTEX)
    578572    {
    579573        int rc2;
    580         RTSemFastMutexRelease(MutexSem);
    581         rc2 = RTSemFastMutexDestroy(MutexSem);
     574        RTSemSpinMutexRelease(hSpinMtx);
     575        rc2 = RTSemSpinMutexDestroy(hSpinMtx);
    582576        AssertRC(rc2);
    583577        if (RT_FAILURE(rc2) && RT_SUCCESS(rc))
     
    769763    pLogger->pfnLogger    = pfnLogger;
    770764    pLogger->pfnFlush     = pfnFlush;
    771     pLogger->MutexSem     = NIL_RTSEMFASTMUTEX; /* Not serialized. */
     765    pLogger->hSpinMtx     = NIL_RTSEMSPINMUTEX; /* Not serialized. */
    772766    pLogger->u32Magic     = RTLOGGER_MAGIC;
    773767    pLogger->fFlags       = fFlags;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette