From 2dd6a7492fb90ef3350ab545ad7b0abef3bd7073 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 f332b335f2..f3e5f80ff6 100644 --- a/servers/slapd/backover.c +++ b/servers/slapd/backover.c @@ -1076,14 +1076,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; } @@ -1110,12 +1118,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