]> git.sur5r.net Git - openldap/blob - servers/slurpd/replica.c
Fixup bugs created by merge.
[openldap] / servers / slurpd / replica.c
1 /*
2  * Copyright (c) 1996 Regents of the University of Michigan.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to the University of Michigan at Ann Arbor. The name of the University
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  */
12
13
14 /*
15  * replica.c - code to start up replica threads.
16  */
17
18 #include "portable.h"
19
20 #include <stdio.h>
21
22 #include "slurp.h"
23 #include "globals.h"
24
25
26 /*
27  * Just invoke the Ri's process() member function, and log the start and
28  * finish.
29  */
30 void
31 replicate(
32     Ri  *ri
33 )
34 {
35     int i;
36     unsigned long seq;
37
38     Debug( LDAP_DEBUG_ARGS, "begin replication thread for %s:%d\n",
39             ri->ri_hostname, ri->ri_port, 0 );
40
41     ri->ri_process( ri );
42
43     Debug( LDAP_DEBUG_ARGS, "end replication thread for %s:%d\n",
44             ri->ri_hostname, ri->ri_port, 0 );
45     return;
46 }
47
48
49
50 /*
51  * Start a detached thread for the given replica.
52  */
53 int
54 start_replica_thread(
55     Ri  *ri
56 )
57 {
58     pthread_attr_t      attr;
59
60     pthread_attr_init( &attr );
61 #ifdef NOTDEF
62         /* if main wants to join with us, we shouldn't detach */
63     pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
64 #endif
65
66 #if !defined(HAVE_PTHREAD_D4) && !defined(HAVE_DCE)
67     /* POSIX_THREADS or compatible
68      * This is a draft 10 or standard pthreads implementation
69      */
70     if ( pthread_create( &(ri->ri_tid), &attr, replicate,
71             (void *) ri ) != 0 ) {
72         Debug( LDAP_DEBUG_ANY, "replica \"%s:%d\" pthread_create failed\n",
73                 ri->ri_hostname, ri->ri_port, 0 );
74         pthread_attr_destroy( &attr );
75         return -1;
76     }
77 #else   /* !final */
78     /*
79      * This is a draft 4 or earlier pthreads implementation
80      */
81     if ( pthread_create( &(ri->ri_tid), attr, replicate,
82             (void *) ri ) != 0 ) {
83         Debug( LDAP_DEBUG_ANY, "replica \"%s:%d\" pthread_create failed\n",
84                 ri->ri_hostname, ri->ri_port, 0 );
85         pthread_attr_destroy( &attr );
86         return -1;
87     }
88 #endif  /* !final */
89
90     pthread_attr_destroy( &attr );
91     return 0;
92 }