Skip to content
Snippets Groups Projects
Commit 1a14def9 authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

Use function pointers to get at backend routines.

parent 8dac33b6
No related branches found
No related tags found
No related merge requests found
......@@ -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 );
......
......@@ -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;
......
......@@ -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(
......
......@@ -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;
......
......@@ -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;
}
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment