]> git.sur5r.net Git - openldap/commitdiff
All implementations of lutil_lockf (aka ldap_lockf) block until
authorKurt Zeilenga <kurt@openldap.org>
Sun, 28 Mar 1999 22:43:43 +0000 (22:43 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Sun, 28 Mar 1999 22:43:43 +0000 (22:43 +0000)
the lock is acquired.  Add comments to that effect.  Remove
unnecessary busy loops from slapd/lock.c and slurpd/lock.c.

include/lutil_lockf.h
libraries/liblutil/lockf.c
servers/slapd/lock.c
servers/slurpd/lock.c

index 49d2c01e050a189687fc5106ec1056a5249d79dc..2ff75b9bb0a014c0a0da1ca20f9e0b0d0983d64d 100644 (file)
@@ -8,8 +8,10 @@
  * in file LICENSE in the top-level directory of the distribution.
  */
 
-/* File locking methods */
-/* only available if fcntl() locking is required */
+/* File locking methods
+ *
+ * lutil_lockf() will block until an exclusive lock is acquired.
+ */
 
 #ifndef _LUTIL_LOCKF_H_
 #define _LUTIL_LOCKF_H_
index c21d2a8dfc1577b49fbf7d03980d3ccc7d27001c..3daf88c695152a994c42babdd099286ea78177dc 100644 (file)
@@ -17,6 +17,8 @@
  *  - flock
  *
  * Other implementations will be added as needed.
+ *
+ * NOTE: lutil_lockf() MUST block until an exclusive lock is acquired.
  */
 
 #include "portable.h"
@@ -51,6 +53,7 @@
 
 #ifdef USE_LOCKF
 int lutil_lockf ( int fd ) {
+       /* use F_LOCK instead of F_TLOCK, ie: block */
        return lockf( fd, F_LOCK, 0 );
 }
 
@@ -62,27 +65,33 @@ int lutil_unlockf ( int fd ) {
 #ifdef USE_FCNTL
 int lutil_lockf ( int fd ) {
        struct flock file_lock;
+
        memset( &file_lock, 0, sizeof( file_lock ) );
        file_lock.l_type = F_WRLCK;
        file_lock.l_whence = SEEK_SET;
        file_lock.l_start = 0;
        file_lock.l_len = 0;
+
+       /* use F_SETLKW instead of F_SETLK, ie: block */
        return( fcntl( fd, F_SETLKW, &file_lock ) );
 }
 
 int lutil_unlockf ( int fd ) {
        struct flock file_lock;
+
        memset( &file_lock, 0, sizeof( file_lock ) );
        file_lock.l_type = F_UNLCK;
        file_lock.l_whence = SEEK_SET;
        file_lock.l_start = 0;
        file_lock.l_len = 0;
-       return( fcntl ( fd, F_SETLK, &file_lock ) );
+
+       return( fcntl ( fd, F_SETLKW, &file_lock ) );
 }
 #endif
 
 #ifdef USE_FLOCK
 int lutil_lockf ( int fd ) {
+       /* use LOCK_EX instead of LOCK_EX|LOCK_NB, ie: block */
        return flock( fd, LOCK_EX );
 }
 
index b23aa9028c32ff68c00196ced538938af70271e1..9325389d121d9be56b8a6d9e520bb7663b9472da 100644 (file)
@@ -30,9 +30,7 @@ lock_fopen( char *fname, char *type, FILE **lfp )
        }
 
        /* acquire the lock */
-       while ( ldap_lockf( fileno(*lfp) ) != 0 ) {
-               ;       /* NULL */
-       }
+       ldap_lockf( fileno(*lfp) );
 
        /* open the log file */
        if ( (fp = fopen( fname, type )) == NULL ) {
index cca1bed3f8ad9aa04e66be56b8fcd194eee46fa5..40c61a25171d2bc41280f96cb0432a61a6c1107b 100644 (file)
@@ -53,10 +53,7 @@ lock_fopen(
        }
 
        /* acquire the lock */
-       while ( ldap_lockf( fileno(*lfp) ) != 0 )
-       {
-               ;       /* NULL */
-       }
+       ldap_lockf( fileno(*lfp) );
 
        /* open the log file */
        if ( (fp = fopen( fname, type )) == NULL ) {