mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-01 14:15:49 +08:00
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.
67 lines
1.4 KiB
C
67 lines
1.4 KiB
C
/*
|
|
* Copyright (c) 1996 Regents of the University of Michigan.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms are permitted
|
|
* provided that this notice is preserved and that due credit is given
|
|
* to the University of Michigan at Ann Arbor. The name of the University
|
|
* may not be used to endorse or promote products derived from this
|
|
* software without specific prior written permission. This software
|
|
* is provided ``as is'' without express or implied warranty.
|
|
*/
|
|
|
|
|
|
/*
|
|
* replica.c - code to start up replica threads.
|
|
*/
|
|
|
|
#include "portable.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "slurp.h"
|
|
#include "globals.h"
|
|
|
|
|
|
/*
|
|
* Just invoke the Ri's process() member function, and log the start and
|
|
* finish.
|
|
*/
|
|
static void *
|
|
replicate(
|
|
void *ri_arg
|
|
)
|
|
{
|
|
Ri *ri = (Ri *) ri_arg;
|
|
|
|
Debug( LDAP_DEBUG_ARGS, "begin replication thread for %s:%d\n",
|
|
((Ri *)ri)->ri_hostname, ((Ri *)ri)->ri_port, 0 );
|
|
|
|
ri->ri_process( ri );
|
|
|
|
Debug( LDAP_DEBUG_ARGS, "end replication thread for %s:%d\n",
|
|
ri->ri_hostname, ri->ri_port, 0 );
|
|
return NULL;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
* Start a detached thread for the given replica.
|
|
*/
|
|
int
|
|
start_replica_thread(
|
|
Ri *ri
|
|
)
|
|
{
|
|
/* 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 );
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|