Return-Path: Delivered-To: apmail-apache-cvs-archive@apache.org Received: (qmail 93442 invoked by uid 500); 29 Nov 2000 10:51:37 -0000 Mailing-List: contact apache-cvs-help@apache.org; run by ezmlm Precedence: bulk Reply-To: new-httpd@apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list apache-cvs@apache.org Received: (qmail 93302 invoked by uid 500); 29 Nov 2000 10:51:32 -0000 Delivered-To: apmail-apache-2.0-cvs@apache.org Date: 29 Nov 2000 10:51:30 -0000 Message-ID: <20001129105130.93268.qmail@locus.apache.org> From: gstein@locus.apache.org To: apache-2.0-cvs@apache.org Subject: cvs commit: apache-2.0/src/lib/sdbm sdbm.c sdbm.h sdbm_lock.c sdbm_private.h gstein 00/11/29 02:51:27 Modified: src/lib/sdbm sdbm.c sdbm.h sdbm_lock.c sdbm_private.h Log: *) fix the SDBM locking code (using apr_(un)lock_file()) *) move some items from the public to the private header *) const-ify sdbm_nullitem Revision Changes Path 1.10 +1 -1 apache-2.0/src/lib/sdbm/sdbm.c Index: sdbm.c =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/sdbm/sdbm.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -u -r1.9 -r1.10 --- sdbm.c 2000/11/29 03:04:00 1.9 +++ sdbm.c 2000/11/29 10:51:17 1.10 @@ -109,7 +109,7 @@ 001777777777, 003777777777, 007777777777, 017777777777 }; -sdbm_datum sdbm_nullitem = {NULL, 0}; +const sdbm_datum sdbm_nullitem = { NULL, 0 }; apr_status_t sdbm_open(SDBM **db, const char *file, apr_int32_t flags, apr_fileperms_t perms, apr_pool_t *p) 1.5 +5 -8 apache-2.0/src/lib/sdbm/sdbm.h Index: sdbm.h =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/sdbm/sdbm.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -u -r1.4 -r1.5 --- sdbm.h 2000/11/26 12:52:36 1.4 +++ sdbm.h 2000/11/29 10:51:18 1.5 @@ -62,6 +62,7 @@ #ifndef SDBM_H #define SDBM_H +#include "apr_errno.h" #include "apr_file_io.h" /* for apr_fileperms_t */ typedef struct SDBM SDBM; @@ -76,19 +77,14 @@ int dsize; } sdbm_datum; -extern sdbm_datum sdbm_nullitem; - /* The extensions used for the database files */ #define SDBM_DIRFEXT ".dir" #define SDBM_PAGFEXT ".pag" /* Standard dbm interface */ - -/* Flags to sdbm_open */ -#define SDBM_RDONLY 0x1 /* data base open read-only */ -apr_status_t sdbm_open(SDBM **db, const char *filename, - int flags, apr_fileperms_t perms, apr_pool_t *p); +apr_status_t sdbm_open(SDBM **db, const char *filename, apr_int32_t flags, + apr_fileperms_t perms, apr_pool_t *p); void sdbm_close(SDBM *db); /* ### should return value? */ @@ -106,7 +102,8 @@ * other */ apr_status_t sdbm_prep(SDBM **db, const char *dirname, const char *pagname, - int flags, apr_fileperms_t perms, apr_pool_t *pool); + apr_int32_t flags, apr_fileperms_t perms, + apr_pool_t *pool); long sdbm_hash(const char *str, int len); 1.6 +8 -37 apache-2.0/src/lib/sdbm/sdbm_lock.c Index: sdbm_lock.c =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/sdbm/sdbm_lock.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -u -r1.5 -r1.6 --- sdbm_lock.c 2000/08/02 05:26:46 1.5 +++ sdbm_lock.c 2000/11/29 10:51:18 1.6 @@ -52,54 +52,25 @@ * . */ -/* -** File locking -** -** Snarfed from mod_rewrite.c. Munged up for our use. -*/ +#include "apr_file_io.h" -#include "apr_lock.h" - #include "sdbm.h" #include "sdbm_private.h" -static apr_lock_t *sdbm_lock_object = NULL; - - -static apr_status_t create_lock(SDBM *db) -{ - /* ### this should be specific to the file... */ - return apr_create_lock(&sdbm_lock_object, APR_MUTEX, APR_LOCKALL, - NULL, NULL); -} - /* NOTE: this function blocks until it acquires the lock */ apr_status_t sdbm_lock(SDBM *db) { - apr_status_t status; + int type; - if (sdbm_lock_object == NULL) { - if ((status = create_lock(db)) != APR_SUCCESS) { - return status; - } - } + if ((db->flags & SDBM_RDONLY) == 0) + type = APR_FLOCK_EXCLUSIVE; + else + type = APR_FLOCK_SHARED; - /* ### incorrect locking semantics. need some APR work first */ -/* return apr_lock(sdbm_lock_object); */ - return APR_SUCCESS; + return apr_lock_file(db->pagf, type); } apr_status_t sdbm_unlock(SDBM *db) { - apr_status_t status; - - if (sdbm_lock_object == NULL) { - if ((status = create_lock(db)) != APR_SUCCESS) { - return status; - } - } - - /* ### incorrect locking semantics. need some APR work first */ -/* return apr_unlock(sdbm_lock_object); */ - return APR_SUCCESS; + return apr_unlock_file(db->pagf); } 1.3 +5 -0 apache-2.0/src/lib/sdbm/sdbm_private.h Index: sdbm_private.h =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/sdbm/sdbm_private.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -u -r1.2 -r1.3 --- sdbm_private.h 2000/08/02 05:26:46 1.2 +++ sdbm_private.h 2000/11/29 10:51:18 1.3 @@ -75,6 +75,9 @@ #define PAIRMAX 1008 /* arbitrary on PBLKSIZ-N */ #endif #define SPLTMAX 10 /* maximum allowed splits */ + +/* for SDBM.flags */ +#define SDBM_RDONLY 0x1 /* data base open read-only */ /* for a single insertion */ struct SDBM { apr_file_t *dirf; /* directory file descriptor */ @@ -94,5 +97,7 @@ apr_status_t sdbm_lock(SDBM *db); apr_status_t sdbm_unlock(SDBM *db); + +extern const sdbm_datum sdbm_nullitem; #endif /* SDBM_PRIVATE_H */