You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.5 KiB

/*-
* 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
}