]> git.sur5r.net Git - openldap/commitdiff
Locks were not always released, in particular if something went wrong.
authorHallvard Furuseth <hallvard@openldap.org>
Wed, 11 Nov 1998 19:17:25 +0000 (19:17 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Wed, 11 Nov 1998 19:17:25 +0000 (19:17 +0000)
Fixed in slurpd and the slapd main dir.  Slapd clients were not examined.
It also "felt right" to swap the order of closing dfp and rfp in slurpd
copy_replog(), so the last acquired lock is unlocked first.

servers/slapd/lock.c
servers/slurpd/fm.c
servers/slurpd/lock.c
servers/slurpd/replog.c
servers/slurpd/ri.c
servers/slurpd/st.c

index 47f09cf546c572df28a79b9518a27e915fce65d5..ad80443eb93755f78c803c416678309aeccc60b1 100644 (file)
@@ -43,6 +43,8 @@ lock_fopen( char *fname, char *type, FILE **lfp )
 #else
                lockf( fileno( *lfp ), F_ULOCK, 0 );
 #endif
+               fclose( *lfp );
+               *lfp = NULL;
                return( NULL );
        }
 
index 2aed9e602ea46bed0e5f48d8aeb95119e1e81a3d..602f8cd8a6547b4a89d82903fc27d0fbb2872d87 100644 (file)
@@ -210,8 +210,7 @@ populate_queue(
        Debug( LDAP_DEBUG_ANY,
                "error: can't seek to offset %ld in file \"%s\"\n",
                sglob->srpos, f, 0 );
-       return;
-    }
+    } else {
     while (( p = get_record( fp )) != NULL ) {
        if ( sglob->rq->rq_add( sglob->rq, p ) < 0 ) {
            char *t;
@@ -227,6 +226,7 @@ populate_queue(
        pthread_yield();
     }
     sglob->srpos = ftell( fp );
+    }
     (void) relinquish_lock( f, fp, lfp );
 }
     
index 17bc995efaa650bebcfd43f62f4820a9726c579a..3e41854eb0dadaae5b5a4965d99b7ea2df0fe582 100644 (file)
@@ -68,6 +68,8 @@ lock_fopen(
 #else
                lockf( fileno( *lfp ), F_ULOCK, 0 );
 #endif
+               fclose( *lfp );
+               *lfp = NULL;
                return( NULL );
        }
 
index 5573215cc52e9c7b38aeb4d63296c0e52ca26ab8..732f3cf5200fef2c56aeedc4b493150b200f9f24 100644 (file)
@@ -117,7 +117,7 @@ copy_replog(
        Debug( LDAP_DEBUG_ANY,
                "Error: copy_replog: Can't lock replog \"%s\" for write: %s\n",
                src, sys_errlist[ errno ], 0 );
-       lock_fclose( rfp );
+       lock_fclose( rfp, lfp );
        return( 1 );
     }
 
@@ -133,12 +133,12 @@ copy_replog(
        truncate( src, (off_t) 0 );
     }
 
-    if ( lock_fclose( rfp, lfp ) == EOF ) {
+    if ( lock_fclose( dfp, dlfp ) == EOF ) {
        Debug( LDAP_DEBUG_ANY,
                "Error: copy_replog: Error closing \"%s\"\n",
                src, 0, 0 );
     }
-    if ( lock_fclose( dfp, dlfp ) == EOF ) {
+    if ( lock_fclose( rfp, lfp ) == EOF ) {
        Debug( LDAP_DEBUG_ANY,
                "Error: copy_replog: Error closing \"%s\"\n",
                src, 0, 0 );
index af7a846e45073a4602a12db919b14890f523b295..964410235a3d16bdb39ee5e40da8c5d40f7e7cd4 100644 (file)
@@ -124,6 +124,7 @@ Ri_process(
        while ( !sglob->slurpd_shutdown &&
                ((new_re = re->re_getnext( re )) == NULL )) {
            if ( sglob->one_shot_mode ) {
+               rq->rq_unlock( rq );
                return 0;
            }
            /* No work - wait on condition variable */
index d18f5381fd2bb9fefeedbbf2d8c7d0a84ba1b810..db5035a1f45d40de058ca2be2bba7dd3443446b4 100644 (file)
@@ -181,6 +181,7 @@ St_read(
        return 0;
     }
     if (( rc = acquire_lock( sglob->slurpd_status_file, &fp, &lfp)) < 0 ) {
+       pthread_mutex_unlock( &(st->st_mutex ));
        return 0;
     }
     while ( fgets( buf, sizeof( buf ), fp ) != NULL ) {