diff options
-rw-r--r-- | src/providers/krb5/krb5_common.c | 2 | ||||
-rw-r--r-- | src/providers/ldap/ldap_common.c | 2 | ||||
-rw-r--r-- | src/util/server.c | 36 | ||||
-rw-r--r-- | src/util/util.h | 2 |
4 files changed, 13 insertions, 29 deletions
diff --git a/src/providers/krb5/krb5_common.c b/src/providers/krb5/krb5_common.c index c40f0dd49..d1d26ee71 100644 --- a/src/providers/krb5/krb5_common.c +++ b/src/providers/krb5/krb5_common.c @@ -887,7 +887,7 @@ void krb5_finalize(struct tevent_context *ev, DEBUG(1, ("remove_krb5_info_files failed.\n")); } - sig_term(signum); + orderly_shutdown(0); } errno_t krb5_install_offline_callback(struct be_ctx *be_ctx, diff --git a/src/providers/ldap/ldap_common.c b/src/providers/ldap/ldap_common.c index cd38ac35a..07fb6ae83 100644 --- a/src/providers/ldap/ldap_common.c +++ b/src/providers/ldap/ldap_common.c @@ -1090,7 +1090,7 @@ static void sdap_finalize(struct tevent_context *ev, DEBUG(1, ("remove_krb5_info_files failed.\n")); } - sig_term(signum); + orderly_shutdown(0); } errno_t sdap_install_sigterm_handler(TALLOC_CTX *mem_ctx, diff --git a/src/util/server.c b/src/util/server.c index 11569b937..b2fad1168 100644 --- a/src/util/server.c +++ b/src/util/server.c @@ -237,18 +237,18 @@ int pidfile(const char *path, const char *name) return 0; } -void sig_term(int sig) +void orderly_shutdown(int status) { #if HAVE_GETPGRP - static int done_sigterm; - if (done_sigterm == 0 && getpgrp() == getpid()) { + static int sent_sigterm; + if (sent_sigterm == 0 && getpgrp() == getpid()) { DEBUG(SSSDBG_FATAL_FAILURE, ("SIGTERM: killing children\n")); - done_sigterm = 1; + sent_sigterm = 1; kill(-getpgrp(), SIGTERM); } #endif - sss_log(SSS_LOG_INFO, "Shutting down"); - exit(0); + if (status == 0) sss_log(SSS_LOG_INFO, "Shutting down"); + exit(status); } static void default_quit(struct tevent_context *ev, @@ -258,31 +258,15 @@ static void default_quit(struct tevent_context *ev, void *siginfo, void *private_data) { -#if HAVE_GETPGRP - static int done_sigterm; - if (done_sigterm == 0 && getpgrp() == getpid()) { - DEBUG(SSSDBG_FATAL_FAILURE, ("SIGTERM: killing children\n")); - done_sigterm = 1; - kill(-getpgrp(), SIGTERM); - } -#endif - sss_log(SSS_LOG_INFO, "Shutting down"); - exit(0); + orderly_shutdown(0); } #ifndef HAVE_PRCTL static void sig_segv_abrt(int sig) { -#if HAVE_GETPGRP - static int done; - if (done == 0 && getpgrp() == getpid()) { - DEBUG(SSSDBG_FATAL_FAILURE, ("%s: killing children\n", - strsignal(sig))); - done = 1; - kill(-getpgrp(), SIGTERM); - } -#endif /* HAVE_GETPGRP */ - exit(1); + DEBUG(SSSDBG_FATAL_FAILURE, + ("Received signal %s, shutting down\n", strsignal(sig))); + orderly_shutdown(1); } #endif /* HAVE_PRCTL */ diff --git a/src/util/util.h b/src/util/util.h index 581ba6fec..4c0e75f12 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -298,7 +298,7 @@ int server_setup(const char *name, int flags, const char *conf_entry, struct main_context **main_ctx); void server_loop(struct main_context *main_ctx); -void sig_term(int sig); +void orderly_shutdown(int status); /* from signal.c */ #include <signal.h> |