]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/backglue.c
More for prev commit
[openldap] / servers / slapd / backglue.c
index cf53b0b5e35976c97a20631ba599933693e1884a..4e8e094891e315528375cb0b9fd78b0477cd9da1 100644 (file)
@@ -949,6 +949,7 @@ typedef struct glue_Addrec {
 
 /* List of added subordinates */
 static glue_Addrec *ga_list;
+static int ga_adding;
 
 static int
 glue_db_init(
@@ -1002,8 +1003,10 @@ glue_db_init(
 
        SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_GLUE_INSTANCE;
 
-       if ( ga_list )
+       if ( ga_list ) {
+               be->bd_info = (BackendInfo *)oi;
                glue_sub_attach( 1 );
+       }
 
        return 0;
 }
@@ -1087,6 +1090,11 @@ glue_sub_attach( int online )
        glue_Addrec *ga, *gnext = NULL;
        int rc = 0;
 
+       if ( ga_adding )
+               return 0;
+
+       ga_adding = 1;
+
        /* For all the subordinate backends */
        for ( ga=ga_list; ga != NULL; ga = gnext ) {
                BackendDB *be;
@@ -1135,8 +1143,11 @@ glue_sub_attach( int online )
                        /* allow this for now, assume a superior will
                         * be added later
                         */
-                       if ( online )
-                               return 0;
+                       if ( online ) {
+                               rc = 0;
+                               gnext = ga_list;
+                               break;
+                       }
                        rc = LDAP_NO_SUCH_OBJECT;
                }
                ch_free( ga );
@@ -1145,6 +1156,8 @@ glue_sub_attach( int online )
 
        ga_list = gnext;
 
+       ga_adding = 0;
+
        return rc;
 }