]> git.sur5r.net Git - openldap/commitdiff
Fix braindead signal handling in linux kernal threads.
authorKurt Spanier <ksp@openldap.org>
Fri, 5 Feb 1999 13:20:57 +0000 (13:20 +0000)
committerKurt Spanier <ksp@openldap.org>
Fri, 5 Feb 1999 13:20:57 +0000 (13:20 +0000)
  First version with waiting on int to become 0; should be implemented
  via conditional variable...
Fix of typos.
First anchor for new bdb2 backend.

servers/slapd/back-ldbm/add.c
servers/slapd/back-ldbm/alias.c
servers/slapd/back-ldbm/idl.c
servers/slapd/daemon.c
servers/slapd/main.c
servers/slapd/slap.h

index 248f31efef26e39930b5c1dc8392af2fd446739c..052b23c6a911d5a0c646301c5645cfca038fa170 100644 (file)
@@ -163,7 +163,7 @@ ldbm_back_add(
                    0 );
                next_id_return( be, e->e_id );
                 
-               entry_rdwr_unlock(e, 1);;
+               entry_rdwr_unlock(e, 1);
                entry_free( e );
 
                send_ldap_result( conn, op, LDAP_ALREADY_EXISTS, "", "" );
index a6e780143eb2bfc9f08c07f731e690699dfd430d..bc818ada9c5de5ce013e5fa124242f2f413fce34 100644 (file)
@@ -315,6 +315,7 @@ char *derefDN ( Backend     *be,
   }
   
   Debug( LDAP_DEBUG_TRACE, "<= returning deref DN of \"%s\"\n", newDN, 0, 0 ); 
+       if (matched != NULL) free(matched);
 
   return newDN;
 }
index e04c4c1674e62869c986dade77534c00ebdc1206..fbc1b5a0047aa12d294b67d2d7ff6198b55d90e0 100644 (file)
@@ -119,7 +119,7 @@ idl_fetch(
                idl_free( idl );
                idl = idl_allids( be );
 
-               return idl;
+               return( idl );
        }
 
        if ( ! ID_BLOCK_INDIRECT( idl ) ) {
index aaed6b7cc444b323a3e48bde66d5e6932b47e0be..86e2606129e35c165c84addf2720a905a538debe 100644 (file)
@@ -40,6 +40,9 @@ static volatile sig_atomic_t slapd_shutdown = 0;
 static void    set_shutdown(int sig);
 static void    do_nothing  (int sig);
 
+int listener_running = 1;
+
+
 /* a link to the slapd.conf configuration parameters */
 extern char *slapd_pid_file;
 extern char *slapd_args_file;
@@ -390,6 +393,11 @@ slapd_daemon(
        }
        ldap_pvt_thread_mutex_unlock( &active_threads_mutex );
 
+       /*  a braindead signal handling in LINUX Kernel Threads needs some
+               provision, so that the top thread is not killed before the
+               listener thread (should be better implemented by cond_vars)  */
+       listener_running = 0;
+
        return NULL;
 }
 
index 67de0a0fdacf20ce0d7e6f7113fe5148d04b08ee..3c08768d6e2daaaecc716bf1dc7f153d27ef5210 100644 (file)
@@ -12,6 +12,8 @@
 #include "lutil.h"                     /* Get lutil_detach() */
 
 
+extern int listener_running;
+
 /*
  * when more than one slapd is running on one machine, each one might have
  * it's own LOCAL for syslogging and must have its own pid/args files
@@ -172,6 +174,10 @@ main( int argc, char **argv )
        openlog( serverName, OPENLOG_OPTIONS );
 #endif
 
+#ifdef SLAPD_BDB2
+       bdb2i_do_timing = 1;
+#endif
+
        if ( slap_init( SLAP_SERVER_MODE, serverName ) != 0 ) {
                rc = 1;
                goto destroy;
@@ -208,7 +214,8 @@ main( int argc, char **argv )
                } else {
 
                        /* wait for the listener thread to complete */
-                       ldap_pvt_thread_join( listener_tid, (void *) NULL );
+                       while ( listener_running )
+                               ldap_pvt_thread_join( listener_tid, (void *) NULL );
                }
 
        } else {
index 10f0135bf2c5ae98a5b0db9db8b88c39f400d945..5dabb215c6ed5f64c0e02750419a37c39f46549b 100644 (file)
 #define ldap_debug slap_debug
 #endif
 
+#ifdef SLAPD_BDB2
+extern int bdb2i_do_timing;
+#endif
+
+
 #include "ldap_log.h"
 
 #include "../../libraries/liblber/lber-int.h"
@@ -151,7 +156,7 @@ typedef struct entry {
        /*
         * remaining fields require backend cache lock to access
         * These items are specific to the LDBM backend and should
-        * and should be hidden.
+        * be hidden.
         */
        char            e_state;        /* for the cache                  */
 #define ENTRY_STATE_DELETED            1