mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-06 15:10:22 -05:00
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.
This commit is contained in:
parent
25f2f9dd70
commit
595bf86635
3 changed files with 9 additions and 73 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
/* 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;
|
||||
}
|
||||
#else /* !final */
|
||||
/*
|
||||
* This is a draft 4 or earlier 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;
|
||||
}
|
||||
#endif /* !final */
|
||||
|
||||
pthread_attr_destroy( &attr );
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue