]> git.sur5r.net Git - openldap/commitdiff
Use function pointers to get at backend routines.
authorKurt Zeilenga <kurt@openldap.org>
Fri, 14 Feb 2003 20:51:35 +0000 (20:51 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Fri, 14 Feb 2003 20:51:35 +0000 (20:51 +0000)
servers/slapd/abandon.c
servers/slapd/back-bdb/init.c
servers/slapd/back-bdb/proto-bdb.h
servers/slapd/back-bdb/psearch.c
servers/slapd/cancel.c
servers/slapd/slap.h

index 33bd0ab159e490793c3840178cc5dc5e2f954dfb..82cc58e607d23264f509783ef829d49aa19e7b8e 100644 (file)
@@ -109,14 +109,11 @@ do_abandon(
 
 done:
 
-#ifdef LDAP_CLIENT_UPDATE
        for ( i = 0; i < nbackends; i++ ) {
-               if ( strncmp( backends[i].be_type, "bdb", 3 ) ) continue;
-               if ( bdb_abandon( &backends[i], conn, id ) == LDAP_SUCCESS ) {
-                       break;
-               }
+               Backend *be = &backends[i];
+
+               if( be->be_abandon ) be->be_abandon( be, conn, op, id );
        }
-#endif
 
        ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
 
index 91d81b7a2a2d8b916ea3d6e32539b12fb5d7806d..89fc7f6fd541721b2e084d865dc475d9711132a6 100644 (file)
@@ -635,7 +635,14 @@ bdb_initialize(
        bi->bi_op_search = bdb_search;
 
        bi->bi_op_unbind = 0;
+
+#ifdef LDAP_CLIENT_UPDATE
+       bi->bi_op_abandon = bdb_abandon;
+       bi->bi_op_cancel = bdb_cancel;
+#else
        bi->bi_op_abandon = 0;
+       bi->bi_op_cancel = 0;
+#endif
 
        bi->bi_extended = bdb_extended;
 
index 5ec4228d434f27007586aed40c257c16dfbbaa35..fe7a308468aa4f385212dd1b513b14cb12c10f8a 100644 (file)
@@ -368,13 +368,19 @@ void bdb_cache_release_all( Cache *cache );
  * lcup.c
  */
 
-#ifdef LDAP_CLIENT_UPDATE
 int bdb_abandon(
        BackendDB       *be,
        Connection      *conn,
+       Operation               *op,
+       ber_int_t       id
+);
+
+int bdb_cancel(
+       BackendDB       *be,
+       Connection      *conn,
+       Operation               *op,
        ber_int_t       id
 );
-#endif
 
 #if defined(LDAP_CLIENT_UPDATE) || defined(LDAP_SYNC)
 int bdb_add_psearch_spec(
index 2dbd40e7525e74e37f9f86d1ef900dbf3bb57282..e62c8ec18b1bd28b267c4c79af986b245899e2d9 100644 (file)
@@ -37,6 +37,7 @@ int
 bdb_abandon(
        BackendDB       *be,
        Connection      *conn,
+       Operation       *op,
        ber_int_t       id )
 {
        Operation       *ps_list;
@@ -59,6 +60,7 @@ int
 bdb_cancel(
        BackendDB       *be,
        Connection      *conn,
+       Operation       *op,
        ber_int_t       id )
 {
        Operation       *ps_list;
index dd98928941df40b94eba94548c5cb0f934438b7d..4416869ad26f936ab92d9a959e0489ee475cd012 100644 (file)
@@ -76,8 +76,7 @@ int cancel_extop(
        }
        ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
 
-       if ( found )
-               return LDAP_SUCCESS;
+       if ( found ) return LDAP_SUCCESS;
 
        found = 0;
        ldap_pvt_thread_mutex_lock( &conn->c_mutex );
@@ -91,9 +90,13 @@ int cancel_extop(
        if ( !found ) {
 #ifdef LDAP_SYNC
                for ( i = 0; i < nbackends; i++ ) {
-                       if ( strncmp( backends[i].be_type, "bdb", 3 ) ) continue;
+                       Backend *be = &backends[i];
+                       if( !be->be_abandon ) continue;
+
+
                        ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
-                       if ( bdb_cancel( &backends[i], conn, opid ) == LDAP_SUCCESS ) {
+
+                       if ( be->be_cancel( be, conn, op, opid ) == LDAP_SUCCESS ) {
                                return LDAP_SUCCESS;
                        } else {
                                *text = "message ID not found";
@@ -101,15 +104,15 @@ int cancel_extop(
                        }
                }
 #else
-               *text = "message ID not found";
                ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
+               *text = "message ID not found";
                return LDAP_NO_SUCH_OPERATION;
 #endif
        }
 
        if ( op->o_cancel != SLAP_CANCEL_NONE ) {
-               *text = "message ID already being cancelled";
                ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
+               *text = "message ID already being cancelled";
                return LDAP_PROTOCOL_ERROR;
        }
 
index 8bf8df0e4790d377036a806a337653ec4f889fa7..29b8d6e72311abed8f9346696121d46f206262c1 100644 (file)
@@ -1226,6 +1226,8 @@ struct slap_backend_db {
 #define                be_modify       bd_info->bi_op_modify
 #define                be_modrdn       bd_info->bi_op_modrdn
 #define                be_search       bd_info->bi_op_search
+#define                be_abandon      bd_info->bi_op_abandon
+#define                be_cancel       bd_info->bi_op_cancel
 
 #define                be_extended     bd_info->bi_extended
 
@@ -1402,6 +1404,9 @@ typedef int (BI_op_delete) LDAP_P((BackendDB *bd,
 typedef int (BI_op_abandon) LDAP_P((BackendDB *bd,
                struct slap_conn *c, struct slap_op *o,
                ber_int_t msgid));
+typedef int (BI_op_cancel) LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               ber_int_t msgid));
 
 typedef int (BI_op_extended) LDAP_P((
        BackendDB               *be,
@@ -1527,6 +1532,7 @@ struct slap_backend_info {
        BI_op_add       *bi_op_add;
        BI_op_delete    *bi_op_delete;
        BI_op_abandon   *bi_op_abandon;
+       BI_op_cancel    *bi_op_cancel;
 
        /* Extended Operations Helper */
        BI_op_extended  *bi_extended;