Commit aa73219c authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

ITS#5374

parent 28b585b6
......@@ -4,6 +4,7 @@ OpenLDAP 2.3.41 Engineering
Fixed slapd idlcache on adds (ITS#5086)
Fixed slapd-bdb modrdn to same dn (ITS#5319)
Fixed slapd-bdb crash with modrdn (ITS#5358)
Fixed slapo-accesslog cleanup on successful response (ITS#5374)
Fixed syncrepl propagation of errors (ITS#5282)
OpenLDAP 2.3.40 Release (2007/12/25)
......
......@@ -60,7 +60,6 @@ typedef struct log_info {
Filter *li_oldf;
Entry *li_old;
int li_success;
int li_unlock;
ldap_pvt_thread_mutex_t li_op_mutex;
ldap_pvt_thread_mutex_t li_log_mutex;
} log_info;
......@@ -911,10 +910,17 @@ static int accesslog_response(Operation *op, SlapReply *rs) {
return SLAP_CB_CONTINUE;
if ( lo->mask & LOG_OP_WRITES ) {
slap_callback *cb;
ldap_pvt_thread_mutex_lock( &li->li_log_mutex );
old = li->li_old;
li->li_old = NULL;
li->li_unlock = 0;
/* Disarm mod_cleanup */
for ( cb = op->o_callback->sc_next; cb; cb = cb->sc_next ) {
if ( cb->sc_private == (void *)on ) {
cb->sc_private = NULL;
break;
}
}
ldap_pvt_thread_mutex_unlock( &li->li_op_mutex );
}
......@@ -1230,12 +1236,11 @@ accesslog_mod_cleanup( Operation *op, SlapReply *rs )
{
slap_callback *sc = op->o_callback;
slap_overinst *on = sc->sc_private;
log_info *li = on->on_bi.bi_private;
op->o_callback = sc->sc_next;
op->o_tmpfree( sc, op->o_tmpmemctx );
if ( li->li_unlock ) {
if ( on ) {
BackendInfo *bi = op->o_bd->bd_info;
op->o_bd->bd_info = (BackendInfo *)on;
accesslog_response( op, rs );
......@@ -1251,18 +1256,15 @@ accesslog_op_mod( Operation *op, SlapReply *rs )
log_info *li = on->on_bi.bi_private;
if ( li->li_ops & LOG_OP_WRITES ) {
slap_callback *cb = op->o_tmpalloc( sizeof( slap_callback ), op->o_tmpmemctx );
slap_callback *cb = op->o_tmpalloc( sizeof( slap_callback ), op->o_tmpmemctx ), *cb2;
cb->sc_cleanup = accesslog_mod_cleanup;
cb->sc_response = NULL;
cb->sc_private = on;
cb->sc_next = op->o_callback;
op->o_callback = cb;
cb->sc_next = NULL;
for ( cb2 = op->o_callback; cb2->sc_next; cb2 = cb2->sc_next );
cb2->sc_next = cb;
/* FIXME: this needs to be a recursive mutex to allow
* overlays like refint to keep working.
*/
ldap_pvt_thread_mutex_lock( &li->li_op_mutex );
li->li_unlock = 1;
if ( li->li_oldf && ( op->o_tag == LDAP_REQ_DELETE ||
op->o_tag == LDAP_REQ_MODIFY )) {
int rc;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment