]> git.sur5r.net Git - openldap/commitdiff
Add struct backend_info->bi_entry_release_rw and related functions.
authorHallvard Furuseth <hallvard@openldap.org>
Tue, 13 Apr 1999 06:08:28 +0000 (06:08 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Tue, 13 Apr 1999 06:08:28 +0000 (06:08 +0000)
Move cache_return_entry_w() out of ldbm_back_add when the add is successful.
This change breaks back-bdb2, it needs equvalent changes of those in back-ldbm.

servers/slapd/add.c
servers/slapd/back-ldbm/Makefile.in
servers/slapd/back-ldbm/add.c
servers/slapd/back-ldbm/init.c
servers/slapd/back-ldbm/proto-back-ldbm.h
servers/slapd/backend.c
servers/slapd/proto-slap.h
servers/slapd/slap.h

index 16eed3a63c3313b57d98dddc2bdf09b3f05ab459..5e195c726f1a15d68ae444a10f51dde467dced1d 100644 (file)
@@ -127,6 +127,7 @@ do_add( Connection *conn, Operation *op )
                        }
                        if ( (*be->be_add)( be, conn, op, e ) == 0 ) {
                                replog( be, LDAP_REQ_ADD, e->e_dn, e, 0 );
+                               be_entry_release_w( be, e );
                        }
 
                } else {
index 985149e9d9b1819534c9f5a1bed15bcc7aae92da..2aa1e6a8e038af15bd251630d1a7b08159f0accc 100644 (file)
@@ -1,9 +1,9 @@
 XSRCS = version.c
-SRCS   = idl.c add.c search.c cache.c dbcache.c dn2id.c id2entry.c \
+SRCS   = idl.c add.c search.c cache.c dbcache.c dn2id.c entry.c id2entry.c \
                index.c id2children.c nextid.c abandon.c compare.c group.c \
                modify.c modrdn.c delete.c init.c config.c bind.c attr.c \
                filterindex.c unbind.c kerberos.c close.c alias.c
-OBJS   = idl.o add.o search.o cache.o dbcache.o dn2id.o id2entry.o \
+OBJS   = idl.o add.o search.o cache.o dbcache.o dn2id.o entry.o id2entry.o \
                index.o id2children.o nextid.o abandon.o compare.o group.o \
                modify.o modrdn.o delete.o init.o config.o bind.o attr.o \
                filterindex.o unbind.o kerberos.o close.o alias.o
index 4b929987ae726d2ff50d9e432fdf30d50ff2a903..dbb96e8f22dc89bafea411a2c5ce5986c42bfe1d 100644 (file)
@@ -218,8 +218,10 @@ return_results:;
                ldap_pvt_thread_mutex_unlock(&li->li_root_mutex);
        }
 
-       /* free entry and writer lock */
-       cache_return_entry_w( &li->li_cache, e ); 
+       if ( rc ) {
+               /* free entry and writer lock */
+               cache_return_entry_w( &li->li_cache, e );
+       }
 
        return( rc );
 }
index 4ca59cf035004a1cc541cd6e935627dc3c93a28d..6ce569339905ff252a0652d1caec9de279f60bc5 100644 (file)
@@ -36,6 +36,7 @@ ldbm_back_initialize(
        bi->bi_op_delete = ldbm_back_delete;
        bi->bi_op_abandon = ldbm_back_abandon;
 
+       bi->bi_entry_release_rw = ldbm_back_entry_release_rw;
 #ifdef SLAPD_ACLGROUPS
        bi->bi_acl_group = ldbm_back_group;
 #endif
index e64c6a4065219297951611d08660828291af17d0..12a8e618694476a0a2ad2bf72d057b749a63ea29 100644 (file)
@@ -75,6 +75,11 @@ Entry * dn2entry_rw LDAP_P(( Backend *be, char *dn, char **matched, int rw ));
 #define dn2entry_r(be, dn, m) dn2entry_rw((be), (dn), (m), 0)
 #define dn2entry_w(be, dn, m) dn2entry_rw((be), (dn), (m), 1)
 
+/*
+ * entry.c
+ */
+int ldbm_back_entry_release_rw LDAP_P(( Backend *be, Entry *e, int rw ));
+
 /*
  * filterindex.c
  */
index ed09a15ac1cd21364b1e673b4a02d079d2f5d903..ed106c23e02d25d3f723070d50f180b5f81bb791 100644 (file)
@@ -482,6 +482,21 @@ be_isroot_pw( Backend *be, char *ndn, struct berval *cred )
        return result == 0;
 }
 
+int
+be_entry_release_rw( Backend *be, Entry *e, int rw )
+{
+       int rc;
+
+       if ( be->be_release ) {
+               /* free and release entry from backend */
+               return be->be_release( be, e, rw );
+       } else {
+               /* free entry */
+               entry_free( e );
+               return 0;
+       }
+}
+
 int
 backend_unbind(
        Connection   *conn,
index 1adb6bf5bdef7ee48ee2c064ddf2698c75cc726a..aeb502a41c00ca0ed89209b87de7064021847572 100644 (file)
@@ -72,6 +72,10 @@ int be_issuffix LDAP_P(( Backend *be, char *suffix ));
 int be_isroot LDAP_P(( Backend *be, char *ndn ));
 int be_isroot_pw LDAP_P(( Backend *be, char *ndn, struct berval *cred ));
 char* be_root_dn LDAP_P(( Backend *be ));
+int be_entry_release_rw LDAP_P(( Backend *be, Entry *e, int rw ));
+#define be_entry_release_r( be, e ) be_entry_release_rw( be, e, 0 )
+#define be_entry_release_w( be, e ) be_entry_release_rw( be, e, 1 )
+
 
 extern int     backend_unbind LDAP_P((Connection *conn, Operation *op));
 
index a7d99114ddd2e40a1a9a59c82a8971c10a0d2378..e1a49d40cf7b43fc9589d8b397c66e8e91845356 100644 (file)
@@ -249,6 +249,7 @@ struct backend_db {
 #define                be_modrdn       bd_info->bi_op_modrdn
 #define                be_search       bd_info->bi_op_search
 
+#define                be_release      bd_info->bi_entry_release_rw
 #define                be_group        bd_info->bi_acl_group
 
        /* these should be renamed from be_ to bd_ */
@@ -361,6 +362,7 @@ struct backend_info {
                int msgid));
 
        /* Auxilary Functions */
+       int     (*bi_entry_release_rw) LDAP_P((BackendDB *bd, Entry *e, int rw));
 #ifdef SLAPD_ACLGROUPS
        int     (*bi_acl_group)  LDAP_P((Backend *bd,
                Entry *e, char *bdn, char *edn,