From beb536298d44f3e9dbe122c8c3bae6ed2fac24f7 Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Fri, 2 Jul 2010 11:31:34 +0000 Subject: [PATCH] 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(). --- servers/slapd/backover.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/servers/slapd/backover.c b/servers/slapd/backover.c index e95b192d0b..773d146fbf 100644 --- a/servers/slapd/backover.c +++ b/servers/slapd/backover.c @@ -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 */ -- 2.39.5