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 );
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;
* 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(
bdb_abandon(
BackendDB *be,
Connection *conn,
+ Operation *op,
ber_int_t id )
{
Operation *ps_list;
bdb_cancel(
BackendDB *be,
Connection *conn,
+ Operation *op,
ber_int_t id )
{
Operation *ps_list;
}
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 );
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";
}
}
#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;
}
#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
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,
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;