]> git.sur5r.net Git - openldap/commitdiff
Delayed backend lock release to replog entry after successful add().
authorKurt Spanier <ksp@openldap.org>
Mon, 19 Apr 1999 10:47:03 +0000 (10:47 +0000)
committerKurt Spanier <ksp@openldap.org>
Mon, 19 Apr 1999 10:47:03 +0000 (10:47 +0000)
servers/slapd/back-bdb2/add.c
servers/slapd/back-bdb2/entry.c
servers/slapd/back-bdb2/proto-back-bdb2.h

index c3a5b69b0c53d06803100fe3e9be48bdf36a8487..f4e40709c6e67928648333225f7473009ab9af1e 100644 (file)
@@ -11,6 +11,9 @@
 #include "back-bdb2.h"
 #include "proto-back-bdb2.h"
 
+static DB_LOCK         lock;
+
+
 static int
 bdb2i_back_add_internal(
     BackendDB  *be,
@@ -217,7 +220,7 @@ return_results:;
                bdb2i_cache_return_entry_w( &li->li_cache, p ); 
        }
 
-       if ( 1 || rc ) {
+       if ( rc ) {
                /* free entry and writer lock */
                bdb2i_cache_return_entry_w( &li->li_cache, e );
        }
@@ -234,9 +237,8 @@ bdb2_back_add(
     Entry      *e
 )
 {
-       DB_LOCK         lock;
        struct ldbminfo *li  = (struct ldbminfo *) be->be_private;
-       struct timeval  time1, time2;
+       struct timeval  time1;
        int             ret;
 
        bdb2i_start_timing( be->bd_info, &time1 );
@@ -248,8 +250,6 @@ bdb2_back_add(
 
        }
 
-       bdb2i_start_timing( be->bd_info, &time2 );
-
        /*  check, if a new default attribute index will be created,
                in which case we have to open the index file BEFORE TP  */
        switch ( slapMode ) {
@@ -262,11 +262,22 @@ bdb2_back_add(
        }
 
        ret = bdb2i_back_add_internal( be, conn, op, e );
-       bdb2i_stop_timing( be->bd_info, time2, "ADD-INTERN", conn, op );
-       (void) bdb2i_leave_backend_w( lock );
+
+       /*  if the operation was successful, we will delay the unlock  */
+       if ( ret )
+               (void) bdb2i_leave_backend_w( lock );
+
        bdb2i_stop_timing( be->bd_info, time1, "ADD", conn, op );
 
        return( ret );
 }
 
 
+int
+bdb2i_release_add_lock( void )
+{
+       (void) bdb2i_leave_backend_w( lock );
+       return 0;
+}
+
+
index d5ed7900663e14ea45da22cc4310d9a71fd4926a..4d9f76d95e7e0a495e8d1bcbe56ad0dbfd8cca51 100644 (file)
@@ -19,12 +19,11 @@ bdb2_back_entry_release_rw(
        int     rw
 )
 {
-#if 0
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
 
        /* free entry and reader or writer lock */
        bdb2i_cache_return_entry_rw( &li->li_cache, e, rw ); 
-#endif
+       bdb2i_release_add_lock();
 
        return 0;
 }
index 04b787fe8c14be11fc84a48d3b8188bb83e28881..159757450d056dc60700b6b928e2c2f16736f502 100644 (file)
@@ -9,6 +9,11 @@
 
 LDAP_BEGIN_DECL
 
+/*
+ * add.c
+ */
+int bdb2i_release_add_lock LDAP_P(());
+
 /*
  * alias.c
  */