]> git.sur5r.net Git - openldap/commitdiff
integrated changed from rage.net glibc.patch
authorKurt Zeilenga <kurt@openldap.org>
Thu, 13 Aug 1998 19:32:43 +0000 (19:32 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Thu, 13 Aug 1998 19:32:43 +0000 (19:32 +0000)
13 files changed:
clients/ud/main.c
include/lthread.h
include/portable.h
libraries/liblthread/thread.c
servers/slapd/charray.c
servers/slapd/connection.c
servers/slapd/daemon.c
servers/slapd/main.c
servers/slapd/result.c
servers/slurpd/fm.c
servers/slurpd/main.c
servers/slurpd/replica.c
servers/slurpd/ri.c

index 86c0b7567fca02d2328f92a0e294fe6f75e3596c..be9508dba9f0b6cf40757497517fba62ed510e96 100644 (file)
@@ -33,7 +33,8 @@
 #include <termios.h>
 #endif /* defined( NeXT ) || defined( ultrix ) etc. */
 #endif /* !DOS */
-#if defined( aix ) || defined( __NetBSD__ )
+#if defined( aix ) || defined( __NetBSD__ ) \
+       || defined( __FreeBSD__ ) || defined( linux )
 #include <sys/ioctl.h>
 #endif /* aix || __NetBSD__ */
 #include <ctype.h>
index 4a3b0a8072c8e942f5bfd9525006a4d73e10cef1..d712a5e59337fe74d66f2167002295bf095ca18c 100644 (file)
@@ -160,6 +160,18 @@ typedef cond_t     pthread_cond_t;
 #define pthread_attr_setdetachstate( a, b ) \
                                        pthread_attr_setdetach_np( a, b )
 
+#else /* end dce pthreads */
+
+#if defined( POSIX_THREADS )
+
+#define _THREAD
+
+#include <pthread.h>
+
+#define pthread_mutexattr_default      NULL
+#define pthread_condattr_default       NULL
+
+#endif /* posix threads */
 #endif /* dce pthreads */
 #endif /* mit pthreads */
 #endif /* sunos5 */
index 0b855b1da084ccc1f8c005cf890c9b768a2a9f64..48838109adfadb131a32476cbff21c6b091f1d6b 100644 (file)
  * Are sys_errlist and sys_nerr declared in stdio.h?
  */
 #ifndef SYSERRLIST_IN_STDIO
-#if defined( freebsd ) || defined( linux )
+#if defined( freebsd ) || defined( __GLIBC__ ) && ( __GLIBC__ > 1 )
 #define SYSERRLIST_IN_STDIO
 #endif
 #endif
index 47d878ac7637f3f9aa778681e5559cc900db04f4..f6e516f5059240cc6a8e484fefc5a8889fad8f65 100644 (file)
@@ -483,6 +483,16 @@ pthread_kill( pthread_t tid, int sig )
        kill( getpid(), sig );
 }
 
+#else
+
+#if defined ( POSIX_THREADS )
+
+void p_thread_yield( void )
+{
+       sched_yield();
+}
+
+#endif /* posix threads */
 #endif /* dce pthreads */
 #endif /* mit pthreads */
 #endif /* sunos5 lwp */
index b731cf1e9021fe81d93ee6cc3b79e2dffdcdacfe..e3b4d37feb673e60821ed43169280dc15dc3e347 100644 (file)
@@ -107,12 +107,15 @@ charray_dup( char **a )
 }
 
 char **
-str2charray( char *str, char *brkstr )
+str2charray( char *str_in, char *brkstr )
 {
        char    **res;
        char    *s;
        int     i;
 
+       /* protect the input string from strtok */
+       char *str = strdup( str_in );
+
        i = 1;
        for ( s = str; *s; s++ ) {
                if ( strchr( brkstr, *s ) != NULL ) {
@@ -128,5 +131,6 @@ str2charray( char *str, char *brkstr )
        }
        res[i] = NULL;
 
+       free( str );
        return( res );
 }
index 5c3ebdf708f7307d78562dee2c30ceaf4f4e567d..df5618ad70e023839559feaa4c147aba81057841 100644 (file)
@@ -203,7 +203,7 @@ connection_activity(
 
        pthread_attr_init( &attr );
        pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
-       if ( pthread_create( &arg->co_op->o_tid, attr,
+       if ( pthread_create( &arg->co_op->o_tid, &attr,
            (void *) connection_operation, (void *) arg ) != 0 ) {
                Debug( LDAP_DEBUG_ANY, "pthread_create failed\n", 0, 0, 0 );
        } else {
index 8d35debc81ba7841528becbd9a76e1f983233863..c2006d398a07e40bef24962f76ede9dbcfc63cff 100644 (file)
@@ -139,8 +139,16 @@ daemon(
        }
 
        (void) SIGNAL( SIGPIPE, SIG_IGN );
+#ifdef SIGSTKFLT
+       (void) SIGNAL( SIGSTKFLT, (void *) do_nothing );
+#else
        (void) SIGNAL( SIGUSR1, (void *) do_nothing );
+#endif
+#ifdef SIGSTKFLT
+       (void) SIGNAL( SIGUNUSED, (void *) set_shutdown );
+#else
        (void) SIGNAL( SIGUSR2, (void *) set_shutdown );
+#endif
        (void) SIGNAL( SIGTERM, (void *) set_shutdown );
        (void) SIGNAL( SIGINT, (void *) set_shutdown );
        (void) SIGNAL( SIGHUP, (void *) set_shutdown );
@@ -365,8 +373,16 @@ set_shutdown()
 {
        Debug( LDAP_DEBUG_ANY, "slapd got shutdown signal\n", 0, 0, 0 );
        slapd_shutdown = 1;
+#ifdef SIGSTKFLT
+       pthread_kill( listener_tid, SIGSTKFLT );
+#else
        pthread_kill( listener_tid, SIGUSR1 );
+#endif
+#ifdef SIGUNUSED
+       (void) SIGNAL( SIGUNUSED, (void *) set_shutdown );
+#else
        (void) SIGNAL( SIGUSR2, (void *) set_shutdown );
+#endif
        (void) SIGNAL( SIGTERM, (void *) set_shutdown );
        (void) SIGNAL( SIGINT, (void *) set_shutdown );
        (void) SIGNAL( SIGHUP, (void *) set_shutdown );
@@ -375,6 +391,10 @@ set_shutdown()
 static void
 do_nothing()
 {
-       Debug( LDAP_DEBUG_TRACE, "slapd got SIGUSR1\n", 0, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "slapd got do_nothing signal\n", 0, 0, 0 );
+#ifdef SIGSTKFLT
+       (void) SIGNAL( SIGSTKFLT, (void *) do_nothing );
+#else
        (void) SIGNAL( SIGUSR1, (void *) do_nothing );
+#endif
 }
index 01930b970910c9c1ad6cd9a8bf6939af58baed05..70b21821b01436d650b72b90be4c7f40fa8a9509 100644 (file)
@@ -10,7 +10,7 @@
 #include "slap.h"
 #include "ldapconfig.h"
 
-extern void    daemon();
+extern void    slapd_daemon();
 extern int     lber_debug;
 
 extern char Versionstr[];
@@ -184,7 +184,7 @@ main( argc, argv )
                pthread_attr_init( &attr );
                pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
 
-               if ( pthread_create( &listener_tid, attr, (void *) daemon,
+               if ( pthread_create( &listener_tid, &attr, (void *) slapd_daemon,
                    (void *) port ) != 0 ) {
                        Debug( LDAP_DEBUG_ANY,
                            "listener pthread_create failed\n", 0, 0, 0 );
index 0ef82a7b3e36e03f85a4a71a91040153fe182064..cdac39a0ab22cd2f1e43ac8c368108c3896d042b 100644 (file)
@@ -121,7 +121,11 @@ send_ldap_result2(
                pthread_mutex_lock( &active_threads_mutex );
                active_threads--;
                conn->c_writewaiter = 1;
+#ifdef SIGSTKFLT
+               pthread_kill( listener_tid, SIGSTKFLT );
+#else
                pthread_kill( listener_tid, SIGUSR1 );
+#endif
                pthread_cond_wait( &conn->c_wcv, &active_threads_mutex );
                pthread_mutex_unlock( &active_threads_mutex );
 
index 2d36838bb549dc4ed3086f44bcf955af03d370a6..e5c0267e9f56aa52678989a3ce677729f302a6b9 100644 (file)
@@ -77,12 +77,20 @@ fm(
 
     /* Set up our signal handlers:
      * SIG{TERM,INT,HUP} causes a shutdown
-     * SIGUSR1 - does nothing, used to wake up sleeping threads.
-     * SIGUSR2 - causes slurpd to read its administrative interface file.
+     * SIG(STKFLT|USR1) - does nothing, used to wake up sleeping threads.
+     * SIG(UNUSED|USR2) - causes slurpd to read its administrative interface file.
      *           (not yet implemented).
      */
+#ifdef SIGSTKFLT
+    (void) SIGNAL( SIGSTKFLT, (void *) do_nothing );
+#else
     (void) SIGNAL( SIGUSR1, (void *) do_nothing );
+#endif
+#ifdef SIGUNUSED
+    (void) SIGNAL( SIGUNUSED, (void *) do_admin );
+#else
     (void) SIGNAL( SIGUSR2, (void *) do_admin );
+#endif
     (void) SIGNAL( SIGTERM, (void *) set_shutdown );
     (void) SIGNAL( SIGINT, (void *) set_shutdown );
     (void) SIGNAL( SIGHUP, (void *) set_shutdown );
@@ -160,7 +168,11 @@ set_shutdown()
     int        i;
 
     sglob->slurpd_shutdown = 1;                                /* set flag */
+#ifdef SIGSTKFLT
+    pthread_kill( sglob->fm_tid, SIGSTKFLT );  /* wake up file mgr */
+#else
     pthread_kill( sglob->fm_tid, SIGUSR1 );            /* wake up file mgr */
+#endif
     sglob->rq->rq_lock( sglob->rq );                   /* lock queue */
     pthread_cond_broadcast( &(sglob->rq->rq_more) );   /* wake repl threads */
     for ( i = 0; i < sglob->num_replicas; i++ ) {
@@ -181,7 +193,11 @@ set_shutdown()
 void
 do_nothing()
 {
+#ifdef SIGSTKFLT
+    (void) SIGNAL( SIGSTKFLT, (void *) do_nothing );
+#else
     (void) SIGNAL( SIGUSR1, (void *) do_nothing );
+#endif
 }
 
 
index a3b935faa578f384b348171f9122abe6aa06c260..98ffb2917c236b95acf5b6102f4ed1d324b15b20 100644 (file)
@@ -121,7 +121,7 @@ main(
      * Start the main file manager thread (in fm.c).
      */
     pthread_attr_init( &attr );
-    if ( pthread_create( &(sglob->fm_tid), attr, (void *) fm, (void *) NULL )
+    if ( pthread_create( &(sglob->fm_tid), &attr, (void *) fm, (void *) NULL )
            != 0 ) {
        Debug( LDAP_DEBUG_ANY, "file manager pthread_create failed\n",
                0, 0, 0 );
index ed25a629077031feed19d6dee387adaea5b66f1b..ce878390fd3092486aa7e876204da519509a5b32 100644 (file)
@@ -59,7 +59,7 @@ start_replica_thread(
     pthread_attr_init( &attr );
     pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
 
-    if ( pthread_create( &(ri->ri_tid), attr, (void *) replicate,
+    if ( pthread_create( &(ri->ri_tid), &attr, (void *) replicate,
            (void *) ri ) != 0 ) {
        Debug( LDAP_DEBUG_ANY, "replica \"%s:%d\" pthread_create failed\n",
                ri->ri_hostname, ri->ri_port, 0 );
index cc478d1e6a77386007feb94078d5b432e56bfd87..40d75eac7976c1b28b640cfc1dc69b16d1562210 100644 (file)
@@ -60,7 +60,11 @@ Ri_process(
     int                rc ;
     char       *errmsg;
 
+#ifdef SIGSTKFLT
+    (void) SIGNAL( SIGSTKFLT, (void *) do_nothing );
+#else
     (void) SIGNAL( SIGUSR1, (void *) do_nothing );
+#endif
     (void) SIGNAL( SIGPIPE, SIG_IGN );
     if ( ri == NULL ) {
        Debug( LDAP_DEBUG_ANY, "Error: Ri_process: ri == NULL!\n", 0, 0, 0 );
@@ -146,7 +150,8 @@ Ri_process(
 
 
 /*
- * Wake a replication thread which may be sleeping.  Send it a SIGUSR1.
+ * Wake a replication thread which may be sleeping.
+ * Send it a SIG(STKFLT|USR1).
  */
 static void
 Ri_wake(
@@ -156,8 +161,13 @@ Ri_wake(
     if ( ri == NULL ) {
        return;
     }
+#ifdef SIGSTKFLT
+    pthread_kill( ri->ri_tid, SIGSTKFLT );
+    (void) SIGNAL( SIGSTKFLT, (void *) do_nothing );
+#else
     pthread_kill( ri->ri_tid, SIGUSR1 );
     (void) SIGNAL( SIGUSR1, (void *) do_nothing );
+#endif
 }