/* There is only one conn table for all overlay instances */
static sort_op **sort_conns;
static ldap_pvt_thread_mutex_t sort_conns_mutex;
+static int ov_count;
static const char *debug_header = "sssvlv";
static int sss_cid;
int rc = SLAP_CB_CONTINUE;
int ok;
sort_op *so, so2;
- sort_ctrl *sc = op->o_controls[sss_cid];
+ sort_ctrl *sc;
PagedResultsState *ps;
vlv_ctrl *vc;
op->o_req_dn.bv_val, op->ors_filterstr.bv_val,
op->o_ctrlflag[sss_cid]);
+ sc = op->o_controls[sss_cid];
if ( sc->sc_nkeys > si->svi_max_keys ) {
rs->sr_text = "Too many sort keys";
rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
sort_conns = ch_calloc( sizeof(sort_op *), dtblsize + 1 );
sort_conns++;
}
+ ov_count++;
return LDAP_SUCCESS;
}
slap_overinst *on = (slap_overinst *)be->bd_info;
sssvlv_info *si = (sssvlv_info *)on->on_bi.bi_private;
+ ov_count--;
+ if ( !ov_count && sort_conns) {
+ sort_conns--;
+ ch_free(sort_conns);
+ ldap_pvt_thread_mutex_destroy( &sort_conns_mutex );
+ }
+
if ( si ) {
ch_free( si );
on->on_bi.bi_private = NULL;