VirtualBox

儲存庫 vbox 的更動 101946


忽略:
時間撮記:
2023-11-7 下午03:16:08 (13 月 以前)
作者:
vboxsync
訊息:

libs/xpcom: Convert plarena.c to use IPRT, bugref:10545

位置:
trunk/src/libs/xpcom18a4/nsprpub/lib/ds
檔案:
修改 2 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.c

    r101869 r101946  
    4545#include <string.h>
    4646#include "plarena.h"
    47 #include "prmem.h"
    4847#include "prbit.h"
    49 #include "prlog.h"
    50 #include "prlock.h"
    51 #include "prinit.h"
     48
     49#include <iprt/assert.h>
     50#include <iprt/errcore.h>
     51#include <iprt/mem.h>
     52#include <iprt/once.h>
     53#include <iprt/semaphore.h>
    5254
    5355static PLArena *arena_freelist;
    5456
    55 #define COUNT(pool,what)
    5657#define PL_ARENA_DEFAULT_ALIGN  sizeof(double)
    5758
    58 static PRLock    *arenaLock;
    59 static PRCallOnceType once;
     59static RTSEMFASTMUTEX g_hMtxArena = NIL_RTSEMFASTMUTEX;
     60static RTONCE         g_rtOnce    = RTONCE_INITIALIZER;
    6061
    6162/*
     
    7374**
    7475*/
    75 static PRStatus InitializeArenas( void )
    76 {
    77     PR_ASSERT( arenaLock == NULL );
    78     arenaLock = PR_NewLock();
    79     if ( arenaLock == NULL )
     76static DECLCALLBACK(int) InitializeArenas(void *pvUser)
     77{
     78    RT_NOREF(pvUser);
     79    Assert(g_hMtxArena == NIL_RTSEMFASTMUTEX);
     80
     81    return RTSemFastMutexCreate(&g_hMtxArena);
     82} /* end ArenaInitialize() */
     83
     84static PRStatus LockArena( void )
     85{
     86    int vrc = RTOnce(&g_rtOnce, InitializeArenas, NULL /*pvUser*/);
     87    if (RT_FAILURE(vrc))
    8088        return PR_FAILURE;
    81     else
    82         return PR_SUCCESS;
    83 } /* end ArenaInitialize() */
    84 
    85 static PRStatus LockArena( void )
    86 {
    87     PRStatus rc = PR_CallOnce( &once, InitializeArenas );
    88 
    89     if ( PR_FAILURE != rc )
    90         PR_Lock( arenaLock );
    91     return(rc);
     89
     90    RTSemFastMutexRequest(g_hMtxArena);
     91    return PR_SUCCESS;
    9292} /* end LockArena() */
    9393
    9494static void UnlockArena( void )
    9595{
    96     PR_Unlock( arenaLock );
     96    RTSemFastMutexRelease(g_hMtxArena);
    9797    return;
    9898} /* end UnlockArena() */
     
    147147    PRUint32 nbOld;
    148148
    149     PR_ASSERT((nb & pool->mask) == 0);
    150    
     149    Assert((nb & pool->mask) == 0);
     150
    151151    nbOld = nb;
    152152    nb = (PRUword)PL_ARENA_ALIGN(pool, nb); /* force alignment */
     
    202202        PRUint32 sz = PR_MAX(pool->arenasize, nb);
    203203        sz += sizeof *a + pool->mask;  /* header and alignment slop */
    204         a = (PLArena*)PR_MALLOC(sz);
     204        a = (PLArena*)RTMemAlloc(sz);
    205205        if ( NULL != a )  {
    206206            a->limit = (PRUword)a + sz;
     
    208208            rp = (char *)a->avail;
    209209            a->avail += nb;
    210             PR_ASSERT(a->avail <= a->limit);
     210            Assert(a->avail <= a->limit);
    211211            /* the newly allocated arena is linked after pool->current
    212212            *  and becomes pool->current */
     
    217217                pool->first.next = a;
    218218            PL_COUNT_ARENA(pool,++);
    219             COUNT(pool, nmallocs);
    220219            return(rp);
    221220        }
     
    254253#ifdef DEBUG
    255254    do {
    256         PR_ASSERT(a->base <= a->avail && a->avail <= a->limit);
     255        Assert(a->base <= a->avail && a->avail <= a->limit);
    257256        a->avail = a->base;
    258257        PL_CLEAR_UNUSED(a);
     
    266265            PL_CLEAR_ARENA(a);
    267266            PL_COUNT_ARENA(pool,--);
    268             PR_DELETE(a);
     267            RTMemFree(a);
    269268        } while ((a = *ap) != 0);
    270269    } else {
     
    299298{
    300299    FreeArenaList(pool, &pool->first, PR_FALSE);
    301     COUNT(pool, ndeallocs);
    302300}
    303301
     
    317315    for (a = arena_freelist; a; a = next) {
    318316        next = a->next;
    319         PR_DELETE(a);
     317        RTMemFree(a);
    320318    }
    321319    arena_freelist = NULL;
    322320
    323     if (arenaLock) {
    324         PR_DestroyLock(arenaLock);
    325         arenaLock = NULL;
    326     }
    327 }
    328 
     321    if (g_hMtxArena != NIL_RTSEMFASTMUTEX) {
     322        RTSemFastMutexDestroy(g_hMtxArena);
     323        g_hMtxArena = NIL_RTSEMFASTMUTEX;
     324    }
     325}
     326
  • trunk/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.h

    r101869 r101946  
    123123#ifdef DEBUG
    124124#define PL_FREE_PATTERN 0xDA
    125 #define PL_CLEAR_UNUSED(a) (PR_ASSERT((a)->avail <= (a)->limit), \
     125#define PL_CLEAR_UNUSED(a) Assert((a)->avail <= (a)->limit); \
    126126                           memset((void*)(a)->avail, PL_FREE_PATTERN, \
    127                            (a)->limit - (a)->avail))
     127                           (a)->limit - (a)->avail)
    128128#define PL_CLEAR_ARENA(a)  memset((void*)(a), PL_FREE_PATTERN, \
    129129                           (a)->limit - (PRUword)(a))
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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