use be_ctrls[cid] for counting the number of overlay instances that have

registered the control for a specific BackendDB to make sure that
the control is unregistered only after the last instance calls
overlay_unregister_control().
This commit is contained in:
Ralf Haferkamp 2010-07-02 11:31:34 +00:00
parent 81dcd3ca58
commit beb536298d

View File

@ -1074,14 +1074,22 @@ overlay_register_control( BackendDB *be, const char *oid )
gotit = 1;
}
bd->be_ctrls[ cid ] = 1;
/* overlays can be instanciated multiple times, use
* be_ctrls[ cid ] as an instance counter, so that the
* overlay's controls are only really disabled after the
* last instance called overlay_register_control() */
bd->be_ctrls[ cid ]++;
bd->be_ctrls[ SLAP_MAX_CIDS ] = 1;
}
}
if ( !gotit ) {
be->bd_self->be_ctrls[ cid ] = 1;
/* overlays can be instanciated multiple times, use
* be_ctrls[ cid ] as an instance counter, so that the
* overlay's controls are only really unregistered after the
* last instance called overlay_register_control() */
be->bd_self->be_ctrls[ cid ]++;
be->bd_self->be_ctrls[ SLAP_MAX_CIDS ] = 1;
}
@ -1108,12 +1116,12 @@ overlay_unregister_control( BackendDB *be, const char *oid )
gotit = 1;
}
bd->be_ctrls[ cid ] = 0;
bd->be_ctrls[ cid ]--;
}
}
if ( !gotit ) {
be->bd_self->be_ctrls[ cid ] = 0;
be->bd_self->be_ctrls[ cid ]--;
}
}
#endif /* SLAP_CONFIG_DELETE */