]> git.sur5r.net Git - openldap/commitdiff
ITS#7233 Fix slapd listener initialization.
authorHallvard Furuseth <hallvard@openldap.org>
Sat, 7 Apr 2012 11:20:19 +0000 (13:20 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Sat, 7 Apr 2012 12:13:50 +0000 (14:13 +0200)
This broke if i was incremented before the new thread read i:
    for(...; i++) { ldap_pvt_thread_create(,,, &i); ... }

servers/slapd/daemon.c

index 2a75f91753ac3fc152e2b735a0935ba63cb0e8ce..3df663ae5c63c5c080316969c969f479499882bd 100644 (file)
@@ -84,6 +84,7 @@ int slapd_tcp_wmem;
 
 Listener **slap_listeners = NULL;
 static volatile sig_atomic_t listening = 1; /* 0 when slap_listeners closed */
+static ldap_pvt_thread_t *listener_tid;
 
 #ifndef SLAPD_LISTEN_BACKLOG
 #define SLAPD_LISTEN_BACKLOG 1024
@@ -2129,7 +2130,7 @@ slapd_daemon_task(
        int l;
        time_t last_idle_check = 0;
        int ebadf = 0;
-       int tid = *(int *)ptr;
+       int tid = (ldap_pvt_thread_t *) ptr - listener_tid;
 
 #define SLAPD_IDLE_CHECK_LIMIT 4
 
@@ -2889,7 +2890,6 @@ int
 slapd_daemon( void )
 {
        int i, rc;
-       ldap_pvt_thread_t       *listener_tid;
 
 #ifdef LDAP_CONNECTIONLESS
        connectionless_init();
@@ -2916,7 +2916,7 @@ slapd_daemon( void )
        {
                /* listener as a separate THREAD */
                rc = ldap_pvt_thread_create( &listener_tid[i],
-                       0, slapd_daemon_task, (void *)&i );
+                       0, slapd_daemon_task, &listener_tid[i] );
 
                if ( rc != 0 ) {
                        Debug( LDAP_DEBUG_ANY,
@@ -2931,6 +2931,7 @@ slapd_daemon( void )
 
        destroy_listeners();
        ch_free( listener_tid );
+       listener_tid = NULL;
 
        return 0;
 }