diff options
Diffstat (limited to 'bdb/mutex/mut_fcntl.c')
-rw-r--r-- | bdb/mutex/mut_fcntl.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/bdb/mutex/mut_fcntl.c b/bdb/mutex/mut_fcntl.c index 02f4d4044f8..2fdf9eff7ef 100644 --- a/bdb/mutex/mut_fcntl.c +++ b/bdb/mutex/mut_fcntl.c @@ -1,14 +1,14 @@ /*- * See the file LICENSE for redistribution information. * - * Copyright (c) 1996, 1997, 1998, 1999, 2000 + * Copyright (c) 1996-2002 * Sleepycat Software. All rights reserved. */ #include "db_config.h" #ifndef lint -static const char revid[] = "$Id: mut_fcntl.c,v 11.11 2001/01/11 18:19:53 bostic Exp $"; +static const char revid[] = "$Id: mut_fcntl.c,v 11.21 2002/05/31 19:37:45 bostic Exp $"; #endif /* not lint */ #ifndef NO_SYSTEM_INCLUDES @@ -26,15 +26,26 @@ static const char revid[] = "$Id: mut_fcntl.c,v 11.11 2001/01/11 18:19:53 bostic * __db_fcntl_mutex_init -- * Initialize a DB mutex structure. * - * PUBLIC: int __db_fcntl_mutex_init __P((DB_ENV *, MUTEX *, u_int32_t)); + * PUBLIC: int __db_fcntl_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t)); */ int __db_fcntl_mutex_init(dbenv, mutexp, offset) DB_ENV *dbenv; - MUTEX *mutexp; + DB_MUTEX *mutexp; u_int32_t offset; { + u_int32_t save; + + /* + * The only setting/checking of the MUTEX_MPOOL flags is in the mutex + * mutex allocation code (__db_mutex_alloc/free). Preserve only that + * flag. This is safe because even if this flag was never explicitly + * set, but happened to be set in memory, it will never be checked or + * acted upon. + */ + save = F_ISSET(mutexp, MUTEX_MPOOL); memset(mutexp, 0, sizeof(*mutexp)); + F_SET(mutexp, save); /* * This is where we decide to ignore locks we don't need to set -- if @@ -46,7 +57,7 @@ __db_fcntl_mutex_init(dbenv, mutexp, offset) } mutexp->off = offset; -#ifdef MUTEX_SYSTEM_RESOURCES +#ifdef HAVE_MUTEX_SYSTEM_RESOURCES mutexp->reg_off = INVALID_ROFF; #endif F_SET(mutexp, MUTEX_INITED); @@ -58,18 +69,17 @@ __db_fcntl_mutex_init(dbenv, mutexp, offset) * __db_fcntl_mutex_lock * Lock on a mutex, blocking if necessary. * - * PUBLIC: int __db_fcntl_mutex_lock __P((DB_ENV *, MUTEX *, DB_FH *)); + * PUBLIC: int __db_fcntl_mutex_lock __P((DB_ENV *, DB_MUTEX *)); */ int -__db_fcntl_mutex_lock(dbenv, mutexp, fhp) +__db_fcntl_mutex_lock(dbenv, mutexp) DB_ENV *dbenv; - MUTEX *mutexp; - DB_FH *fhp; + DB_MUTEX *mutexp; { struct flock k_lock; int locked, ms, waited; - if (!dbenv->db_mutexlocks) + if (F_ISSET(dbenv, DB_ENV_NOLOCKING)) return (0); /* Initialize the lock. */ @@ -91,18 +101,18 @@ __db_fcntl_mutex_lock(dbenv, mutexp, fhp) /* Acquire an exclusive kernel lock. */ k_lock.l_type = F_WRLCK; - if (fcntl(fhp->fd, F_SETLKW, &k_lock)) + if (fcntl(dbenv->lockfhp->fd, F_SETLKW, &k_lock)) return (__os_get_errno()); /* If the resource is still available, it's ours. */ if (mutexp->pid == 0) { locked = 1; - mutexp->pid = (u_int32_t)getpid(); + __os_id(&mutexp->pid); } /* Release the kernel lock. */ k_lock.l_type = F_UNLCK; - if (fcntl(fhp->fd, F_SETLK, &k_lock)) + if (fcntl(dbenv->lockfhp->fd, F_SETLK, &k_lock)) return (__os_get_errno()); /* @@ -129,14 +139,14 @@ __db_fcntl_mutex_lock(dbenv, mutexp, fhp) * __db_fcntl_mutex_unlock -- * Release a lock. * - * PUBLIC: int __db_fcntl_mutex_unlock __P((DB_ENV *, MUTEX *)); + * PUBLIC: int __db_fcntl_mutex_unlock __P((DB_ENV *, DB_MUTEX *)); */ int __db_fcntl_mutex_unlock(dbenv, mutexp) DB_ENV *dbenv; - MUTEX *mutexp; + DB_MUTEX *mutexp; { - if (!dbenv->db_mutexlocks) + if (F_ISSET(dbenv, DB_ENV_NOLOCKING)) return (0); #ifdef DIAGNOSTIC @@ -160,13 +170,13 @@ __db_fcntl_mutex_unlock(dbenv, mutexp) /* * __db_fcntl_mutex_destroy -- - * Destroy a MUTEX. + * Destroy a DB_MUTEX. * - * PUBLIC: int __db_fcntl_mutex_destroy __P((MUTEX *)); + * PUBLIC: int __db_fcntl_mutex_destroy __P((DB_MUTEX *)); */ int __db_fcntl_mutex_destroy(mutexp) - MUTEX *mutexp; + DB_MUTEX *mutexp; { COMPQUIET(mutexp, NULL); |