]> git.sur5r.net Git - openldap/commitdiff
use be_ctrls[cid] for counting the number of overlay instances that have
authorRalf Haferkamp <ralf@openldap.org>
Fri, 2 Jul 2010 11:31:34 +0000 (11:31 +0000)
committerRalf Haferkamp <ralf@openldap.org>
Fri, 2 Jul 2010 11:31:34 +0000 (11:31 +0000)
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

index e95b192d0ba65ffc6a991b5ae4e2058806cec016..773d146fbf2233685f9fdcf1157b9d045988bd1b 100644 (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 */