Filter *li_oldf;
Entry *li_old;
int li_success;
- ldap_pvt_thread_mutex_t li_op_mutex;
+ ldap_pvt_thread_rmutex_t li_op_rmutex;
ldap_pvt_thread_mutex_t li_log_mutex;
} log_info;
ldap_pvt_thread_mutex_lock( &li->li_log_mutex );
old = li->li_old;
li->li_old = NULL;
- ldap_pvt_thread_mutex_unlock( &li->li_op_mutex );
+ ldap_pvt_thread_rmutex_unlock( &li->li_op_rmutex );
}
if ( li->li_success && rs->sr_err != LDAP_SUCCESS )
log_info *li = on->on_bi.bi_private;
if ( li->li_ops & LOG_OP_WRITES ) {
- /* 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 );
+ ldap_pvt_thread_rmutex_lock( &li->li_op_rmutex );
if ( li->li_oldf && ( op->o_tag == LDAP_REQ_DELETE ||
op->o_tag == LDAP_REQ_MODIFY )) {
int rc;
log_info *li = ch_calloc(1, sizeof(log_info));
on->on_bi.bi_private = li;
- ldap_pvt_thread_mutex_init( &li->li_op_mutex );
+ ldap_pvt_thread_rmutex_init( &li->li_op_rmutex );
ldap_pvt_thread_mutex_init( &li->li_log_mutex );
return 0;
}
log_info *li = on->on_bi.bi_private;
ldap_pvt_thread_mutex_destroy( &li->li_log_mutex );
- ldap_pvt_thread_mutex_destroy( &li->li_op_mutex );
+ ldap_pvt_thread_rmutex_destroy( &li->li_op_rmutex );
free( li );
return LDAP_SUCCESS;
}