]> git.sur5r.net Git - openldap/commitdiff
Cleanup thread handling to resolve non-exiting daemons on FreeBSD.
authorKurt Zeilenga <kurt@openldap.org>
Wed, 30 Dec 1998 00:06:27 +0000 (00:06 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Wed, 30 Dec 1998 00:06:27 +0000 (00:06 +0000)
Seems that calling pthread_exit() in the main (and only active)
thread does not cause the whole process to exit.  Very odd.
Anyways, as we want to whole process to exit, we should just exit
after joining with our other threads.
I've also removed dead code for detaching threads we join with.

servers/slapd/main.c
servers/slurpd/main.c
servers/slurpd/replica.c

index 8f5df3bd7b5b44f80fb437a912baca34384092e1..0ffbd3c9c2e137980b1d39749accfb4cdb2b3f8f 100644 (file)
@@ -179,44 +179,25 @@ main( int argc, char **argv )
        read_config( configfile, &be, fp );
 
        if ( ! inetd ) {
-               pthread_attr_t  attr;
                int             status;
 
                time( &starttime );
-               pthread_attr_init( &attr );
-#ifdef DETACH_LISTENER_THREAD
-               /* we should detach it if we're going to join with it */
-               pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
-#endif
 
-#if !defined(HAVE_PTHREADS_D4)
-               /* POSIX_THREADS or compatible
-                * This is a draft 10 or standard pthreads implementation
-                */
-               if ( pthread_create( &listener_tid, &attr, slapd_daemon,
+               if ( pthread_create( &listener_tid, NULL, slapd_daemon,
                    (void *) port ) != 0 ) {
                        Debug( LDAP_DEBUG_ANY,
                            "listener pthread_create failed\n", 0, 0, 0 );
                        exit( 1 );
                }
-#else  /* draft4 */
-               /*
-                * This is a draft 4 or earlier pthreads implementation
-                */
-               if ( pthread_create( &listener_tid, attr, slapd_daemon,
-                   (void *) port ) != 0 ) {
-                       Debug( LDAP_DEBUG_ANY,
-                           "listener pthread_create failed\n", 0, 0, 0 );
-                       exit( 1 );
-               }
-#endif /* !draft4 */
-               pthread_attr_destroy( &attr );
+
 #ifdef HAVE_PHREADS_FINAL
                pthread_join( listener_tid, (void *) NULL );
 #else
                pthread_join( listener_tid, (void *) &status );
 #endif
-               pthread_exit( 0 );
+
+               return 0;
+
        } else {
                Connection              c;
                Operation               *o;
index 28a27fc2ffa577edd35f58c3a8b4650bf36557fe..5469454cc715030377e933ce3b578d1e28911f3d 100644 (file)
@@ -112,33 +112,13 @@ main(
     /*
      * Start the main file manager thread (in fm.c).
      */
-    pthread_attr_init( &attr );
-
-#if !defined(HAVE_PTHREADS_D4)
-    /* POSIX_THREADS or compatible
-     * This is a draft 10 or standard pthreads implementation
-     */
-    if ( pthread_create( &(sglob->fm_tid), &attr, fm, (void *) NULL )
+    if ( pthread_create( &(sglob->fm_tid), NULL, fm, (void *) NULL )
            != 0 ) {
        Debug( LDAP_DEBUG_ANY, "file manager pthread_create failed\n",
                0, 0, 0 );
        exit( 1 );
 
     }
-#else /* !PTHREADS_FINAL */
-    /*
-     * This is a draft 4 or earlier pthreads implementation
-     */
-    if ( pthread_create( &(sglob->fm_tid), attr, fm, (void *) NULL )
-           != 0 ) {
-       Debug( LDAP_DEBUG_ANY, "file manager pthread_create failed\n",
-               0, 0, 0 );
-       exit( 1 );
-
-    }
-#endif /* !PTHREADS_FINAL */
-
-    pthread_attr_destroy( &attr );
 
     /*
      * Wait for the fm thread to finish.
@@ -160,7 +140,7 @@ main(
     }
     Debug( LDAP_DEBUG_ANY, "slurpd: terminating normally\n", 0, 0, 0 );
     sglob->slurpd_shutdown = 1;
-    pthread_exit( 0 );
 
+       return 0;
 #endif /* !NO_THREADS */
 }
index 41861617a0827d59227b1c6b27171cc3d24915fb..7ccd356a15f33150411684ae415237c8fc5643b5 100644 (file)
@@ -54,38 +54,13 @@ start_replica_thread(
     Ri *ri
 )
 {
-    pthread_attr_t     attr;
-
-    pthread_attr_init( &attr );
-#ifdef NOTDEF
-       /* if main wants to join with us, we shouldn't detach */
-    pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
-#endif
-
-#if !defined(HAVE_PTHREADS_D4)
-    /* POSIX_THREADS or compatible
-     * This is a draft 10 or standard pthreads implementation
-     */
-    if ( pthread_create( &(ri->ri_tid), &attr, replicate,
-           (void *) ri ) != 0 ) {
-       Debug( LDAP_DEBUG_ANY, "replica \"%s:%d\" pthread_create failed\n",
-               ri->ri_hostname, ri->ri_port, 0 );
-       pthread_attr_destroy( &attr );
-       return -1;
-    }
-#else  /* !final */
-    /*
-     * This is a draft 4 or earlier pthreads implementation
-     */
-    if ( pthread_create( &(ri->ri_tid), attr, replicate,
+    /* POSIX_THREADS or compatible */
+    if ( pthread_create( &(ri->ri_tid), NULL, replicate,
            (void *) ri ) != 0 ) {
        Debug( LDAP_DEBUG_ANY, "replica \"%s:%d\" pthread_create failed\n",
                ri->ri_hostname, ri->ri_port, 0 );
-       pthread_attr_destroy( &attr );
        return -1;
     }
-#endif /* !final */
 
-    pthread_attr_destroy( &attr );
     return 0;
 }