summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/providers/krb5/krb5_common.c2
-rw-r--r--src/providers/ldap/ldap_common.c2
-rw-r--r--src/util/server.c36
-rw-r--r--src/util/util.h2
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>