1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 1999
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
static const char sccsid[] = "@(#)mutex.c 11.1 (Sleepycat) 7/25/99";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#endif
#include "db_int.h"
/*
* CDB___db_mutex_alloc --
* Allocate and initialize a mutex.
*
* PUBLIC: int CDB___db_mutex_alloc __P((DB_ENV *, REGINFO *, MUTEX **));
*/
int
CDB___db_mutex_alloc(dbenv, infop, storep)
DB_ENV *dbenv;
REGINFO *infop;
MUTEX **storep;
{
int ret;
/*
* If the architecture supports mutex in heap memory, simply
* use that memory. If it doesn't, we have to allocate space
* in the region.
*/
#ifdef MUTEX_NO_MALLOC_LOCKS
R_LOCK(dbenv, infop);
ret = CDB___db_shalloc(infop->addr, sizeof(MUTEX), MUTEX_ALIGN, storep);
R_UNLOCK(dbenv, infop);
#else
COMPQUIET(dbenv, NULL);
COMPQUIET(infop, NULL);
ret = CDB___os_calloc(1, sizeof(MUTEX), storep);
#endif
return (ret);
}
/*
* CDB___db_mutex_free --
* Free a mutex.
*
* PUBLIC: void CDB___db_mutex_free __P((DB_ENV *, REGINFO *, MUTEX *));
*/
void
CDB___db_mutex_free(dbenv, infop, mutexp)
DB_ENV *dbenv;
REGINFO *infop;
MUTEX *mutexp;
{
#ifdef MUTEX_NO_MALLOC_LOCKS
R_LOCK(dbenv, infop);
CDB___db_shalloc_free(infop->addr, mutexp);
R_UNLOCK(dbenv, infop);
#else
COMPQUIET(dbenv, NULL);
COMPQUIET(infop, NULL);
CDB___os_free(mutexp, sizeof(*mutexp));
#endif
}
|