From 3111cfa3bd3e7485b3fa7a922568a435cb61b94e Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Wed, 18 Nov 1998 17:45:32 +0000 Subject: [PATCH] Update LinuxThread signal handling. Hide #ifdef hell in ac/signal.h. --- include/ac/signal.h | 32 ++++++++++++++++++++++++++++++++ servers/slapd/daemon.c | 36 +++++------------------------------- servers/slapd/result.c | 8 ++------ servers/slurpd/admin.c | 2 +- servers/slurpd/fm.c | 21 ++++----------------- servers/slurpd/ri.c | 15 +++------------ 6 files changed, 47 insertions(+), 67 deletions(-) diff --git a/include/ac/signal.h b/include/ac/signal.h index 56597a0bfe..e5776f387c 100644 --- a/include/ac/signal.h +++ b/include/ac/signal.h @@ -11,4 +11,36 @@ #define SIGNAL signal #endif +#if !defined( LDAP_SIGUSR1 ) || !defined( LDAP_SIGUSR2 ) +#undef LDAP_SIGUSR1 +#undef LDAP_SIGUSR2 + +# ifndef HAVE_LINUX_THREADS +# define LDAP_SIGUSR1 SIGUSR1 +# define LDAP_SIGUSR2 SIGUSR2 + +# else + /* + LinuxThreads implemented unfortunately uses the only + two signals reserved for user applications. This forces + OpenLDAP to use, hopefullly unused, signals reserved + for other uses. + */ + +# if defined( SIGSTKFLT ) +# define LDAP_SIGUSR1 SIGSTKFLT +# elif defined ( SIGSYS ) +# define LDAP_SIGUSR1 SIGSYS +# endif + +# ifdef defined( SIGUNUSED ) +# define LDAP_SIGUSR2 SIGUNUSED +# elif defined ( SIGINFO ) +# define LDAP_SIGUSR1 SIGINFO +# elif defined ( SIGEMT ) +# define LDAP_SIGUSR1 SIGEMT +# endif +# endif +#endif + #endif /* _AC_SIGNAL_H */ diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index 48eb7f13d3..2258f1c2d6 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -127,17 +127,8 @@ slapd_daemon( } (void) SIGNAL( SIGPIPE, SIG_IGN ); -#ifdef HAVE_LINUX_THREADS - /* - * LinuxThreads are implemented using SIGUSR1/USR2, - * so we'll use SIGSTKFLT and SIGUNUSED - */ - (void) SIGNAL( SIGSTKFLT, do_nothing ); - (void) SIGNAL( SIGUNUSED, set_shutdown ); -#else /* !linux */ - (void) SIGNAL( SIGUSR1, do_nothing ); - (void) SIGNAL( SIGUSR2, set_shutdown ); -#endif /* !linux */ + (void) SIGNAL( LDAP_SIGUSR1, do_nothing ); + (void) SIGNAL( LDAP_SIGUSR2, set_shutdown ); (void) SIGNAL( SIGTERM, set_shutdown ); (void) SIGNAL( SIGINT, set_shutdown ); (void) SIGNAL( SIGHUP, set_shutdown ); @@ -401,17 +392,8 @@ set_shutdown( int sig ) { Debug( LDAP_DEBUG_ANY, "slapd got shutdown signal %d\n", sig, 0, 0 ); slapd_shutdown = 1; -#ifdef HAVE_LINUX_THREADS - /* - * LinuxThreads are implemented using SIGUSR1/USR2, - * so we'll use SIGSTKFLT and SIGUNUSED - */ - pthread_kill( listener_tid, SIGSTKFLT ); - (void) SIGNAL( SIGUNUSED, set_shutdown ); -#else /* !linux */ - pthread_kill( listener_tid, SIGUSR1 ); - (void) SIGNAL( SIGUSR2, set_shutdown ); -#endif /* !linux */ + pthread_kill( listener_tid, LDAP_SIGUSR1 ); + (void) SIGNAL( LDAP_SIGUSR2, set_shutdown ); (void) SIGNAL( SIGTERM, set_shutdown ); (void) SIGNAL( SIGINT, set_shutdown ); (void) SIGNAL( SIGHUP, set_shutdown ); @@ -421,13 +403,5 @@ static void do_nothing( int sig ) { Debug( LDAP_DEBUG_TRACE, "slapd got do_nothing signal %d\n", sig, 0, 0 ); -#ifdef HAVE_LINUX_THREADS - /* - * LinuxThreads are implemented using SIGUSR1/USR2, - * so we'll use SIGSTKFLT and SIGUNUSED - */ - (void) SIGNAL( SIGSTKFLT, do_nothing ); -#else /* !linux */ - (void) SIGNAL( SIGUSR1, do_nothing ); -#endif /* !linux */ + (void) SIGNAL( LDAP_SIGUSR1, do_nothing ); } diff --git a/servers/slapd/result.c b/servers/slapd/result.c index a710e1910f..a18ba20a86 100644 --- a/servers/slapd/result.c +++ b/servers/slapd/result.c @@ -113,11 +113,7 @@ send_ldap_result2( active_threads--; conn->c_writewaiter = 1; -#ifdef HAVE_LINUX_THREADS - pthread_kill( listener_tid, SIGSTKFLT ); -#else /* !linux */ - pthread_kill( listener_tid, SIGUSR1 ); -#endif /* !linux */ + pthread_kill( listener_tid, LDAP_SIGUSR1 ); pthread_cond_wait( &conn->c_wcv, &active_threads_mutex ); pthread_mutex_unlock( &active_threads_mutex ); @@ -348,7 +344,7 @@ send_search_entry( pthread_mutex_lock( &active_threads_mutex ); active_threads--; conn->c_writewaiter = 1; - pthread_kill( listener_tid, SIGUSR1 ); + pthread_kill( listener_tid, LDAP_SIGUSR1 ); pthread_cond_wait( &conn->c_wcv, &active_threads_mutex ); pthread_mutex_unlock( &active_threads_mutex ); diff --git a/servers/slurpd/admin.c b/servers/slurpd/admin.c index b5aecdca0f..4c814b2b00 100644 --- a/servers/slurpd/admin.c +++ b/servers/slurpd/admin.c @@ -39,5 +39,5 @@ RETSIGTYPE do_admin( int sig ) { sglob->rq->rq_dump( sglob->rq ); - (void) SIGNAL( SIGUSR2, do_admin ); + (void) SIGNAL( LDAP_SIGUSR2, do_admin ); } diff --git a/servers/slurpd/fm.c b/servers/slurpd/fm.c index be02d2b6f9..fb51270ecd 100644 --- a/servers/slurpd/fm.c +++ b/servers/slurpd/fm.c @@ -55,13 +55,8 @@ fm( * SIG(UNUSED|USR2) - causes slurpd to read its administrative interface file. * (not yet implemented). */ -#ifdef HAVE_LINUX_THREADS - (void) SIGNAL( SIGSTKFLT, do_nothing ); - (void) SIGNAL( SIGUNUSED, do_admin ); -#else - (void) SIGNAL( SIGUSR1, do_nothing ); - (void) SIGNAL( SIGUSR2, do_admin ); -#endif + (void) SIGNAL( LDAP_SIGUSR1, do_nothing ); + (void) SIGNAL( LDAP_SIGUSR2, do_admin ); (void) SIGNAL( SIGTERM, set_shutdown ); (void) SIGNAL( SIGINT, set_shutdown ); (void) SIGNAL( SIGHUP, set_shutdown ); @@ -140,11 +135,7 @@ set_shutdown(int x) int i; sglob->slurpd_shutdown = 1; /* set flag */ -#ifdef HAVE_LINUX_THREADS - pthread_kill( sglob->fm_tid, SIGSTKFLT ); /* wake up file mgr */ -#else - pthread_kill( sglob->fm_tid, SIGUSR1 ); /* wake up file mgr */ -#endif + pthread_kill( sglob->fm_tid, LDAP_SIGUSR1 ); /* wake up file mgr */ 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++ ) { @@ -165,11 +156,7 @@ set_shutdown(int x) RETSIGTYPE do_nothing(int i) { -#ifdef HAVE_LINUX_THREADS - (void) SIGNAL( SIGSTKFLT, do_nothing ); -#else - (void) SIGNAL( SIGUSR1, do_nothing ); -#endif + (void) SIGNAL( LDAP_SIGUSR1, do_nothing ); } diff --git a/servers/slurpd/ri.c b/servers/slurpd/ri.c index 5f27e121ac..d2aa7de252 100644 --- a/servers/slurpd/ri.c +++ b/servers/slurpd/ri.c @@ -45,11 +45,7 @@ Ri_process( int rc ; char *errmsg; -#ifdef HAVE_LINUX_THREADS - (void) SIGNAL( SIGSTKFLT, do_nothing ); -#else - (void) SIGNAL( SIGUSR1, do_nothing ); -#endif + (void) SIGNAL( LDAP_SIGUSR1, do_nothing ); (void) SIGNAL( SIGPIPE, SIG_IGN ); if ( ri == NULL ) { Debug( LDAP_DEBUG_ANY, "Error: Ri_process: ri == NULL!\n", 0, 0, 0 ); @@ -149,13 +145,8 @@ Ri_wake( if ( ri == NULL ) { return; } -#ifdef HAVE_LINUX_THREADS - pthread_kill( ri->ri_tid, SIGSTKFLT ); - (void) SIGNAL( SIGSTKFLT, do_nothing ); -#else - pthread_kill( ri->ri_tid, SIGUSR1 ); - (void) SIGNAL( SIGUSR1, do_nothing ); -#endif + pthread_kill( ri->ri_tid, LDAP_SIGUSR1 ); + (void) SIGNAL( LDAP_SIGUSR1, do_nothing ); } -- 2.39.5