From: Kurt Zeilenga Date: Wed, 30 Dec 1998 00:06:27 +0000 (+0000) Subject: Cleanup thread handling to resolve non-exiting daemons on FreeBSD. X-Git-Tag: OPENLDAP_SLAPD_BACK_LDAP~832 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=595bf86635fabc054cca0e2da70129bec777cfaf;p=openldap Cleanup thread handling to resolve non-exiting daemons on FreeBSD. 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. --- diff --git a/servers/slapd/main.c b/servers/slapd/main.c index 8f5df3bd7b..0ffbd3c9c2 100644 --- a/servers/slapd/main.c +++ b/servers/slapd/main.c @@ -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; diff --git a/servers/slurpd/main.c b/servers/slurpd/main.c index 28a27fc2ff..5469454cc7 100644 --- a/servers/slurpd/main.c +++ b/servers/slurpd/main.c @@ -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 */ } diff --git a/servers/slurpd/replica.c b/servers/slurpd/replica.c index 41861617a0..7ccd356a15 100644 --- a/servers/slurpd/replica.c +++ b/servers/slurpd/replica.c @@ -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; }