]> git.sur5r.net Git - openldap/commitdiff
ITS#141: move body of next_id_save() into new function next_id_get_save(),
authorHallvard Furuseth <hallvard@openldap.org>
Thu, 29 Apr 1999 22:26:58 +0000 (22:26 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Thu, 29 Apr 1999 22:26:58 +0000 (22:26 +0000)
so the (read id, write id) sequence is protected by li_nextid_mutex.

servers/slapd/back-ldbm/nextid.c

index 7c6f2264135a21400d9a07a3fb73c8d9ec3a91a0..031e0a1d36fe46a61b61cf5b6e8763c036f7e106 100644 (file)
 #include "slap.h"
 #include "back-ldbm.h"
 
+static ID  next_id_read( Backend *be );
+static int next_id_write( Backend *be, ID id );
+static ID  next_id_get_save( Backend *be, int do_save );
+
+
 static ID
 next_id_read( Backend *be )
 {
@@ -84,15 +89,7 @@ next_id_write( Backend *be, ID id )
 int
 next_id_save( Backend *be )
 {
-       struct ldbminfo *li = (struct ldbminfo *) be->be_private;
-       ID id = next_id_get( be );
-       int rc = next_id_write( be, id );
-
-       if (rc == 0) {
-               li->li_nextid_wrote = id;
-       }
-
-       return rc;
+       return( next_id_get_save( be, 1 ) == NOID ? -1 : 0 );
 }
 
 ID
@@ -156,6 +153,12 @@ next_id_return( Backend *be, ID id )
 
 ID
 next_id_get( Backend *be )
+{
+       return next_id_get_save( be, 0 );
+}
+
+static ID
+next_id_get_save( Backend *be, int do_save )
 {
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
        ID              id;
@@ -177,6 +180,14 @@ next_id_get( Backend *be )
 
        id = li->li_nextid;
 
+       if ( do_save ) {
+               if ( next_id_write( be, id ) == 0 ) {
+                       li->li_nextid_wrote = id;
+               } else {
+                       id = NOID;
+               }
+       }
+
        ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
 
        return( id );