summaryrefslogtreecommitdiff
path: root/src/login
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-04-24 18:14:25 +0200
committerSven Eden <yamakuzure@gmx.net>2018-08-24 16:47:08 +0200
commit9b3847c976625d0f60e513f762468de2443a2459 (patch)
tree46c051493f3953ead156ee9cfc4a2603bd7f5282 /src/login
parente3ef5e1e1e4269e9f9f02f73778db58a83a626fb (diff)
logind: terminate cleanly on SIGTERM/SIGINT
Let's properly terminate on SIGTERM or SIGINT. Previously we'd just rely on the implicit process clean-up logic on UNIX. By shutting down properly on SIGTERM/SIGINT we make it easier to track down memory leaks by employing valgrind.
Diffstat (limited to 'src/login')
-rw-r--r--src/login/logind.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/login/logind.c b/src/login/logind.c
index 537a73908..1687891d0 100644
--- a/src/login/logind.c
+++ b/src/login/logind.c
@@ -89,6 +89,14 @@ static int manager_new(Manager **ret) {
if (r < 0)
return r;
+ r = sd_event_add_signal(m->event, NULL, SIGINT, NULL, NULL);
+ if (r < 0)
+ return r;
+
+ r = sd_event_add_signal(m->event, NULL, SIGTERM, NULL, NULL);
+ if (r < 0)
+ return r;
+
(void) sd_event_set_watchdog(m->event, true);
manager_reset_config(m);
@@ -1140,8 +1148,6 @@ static int manager_startup(Manager *m) {
assert(m);
- assert_se(sigprocmask_many(SIG_SETMASK, NULL, SIGHUP, -1) >= 0);
-
r = sd_event_add_signal(m->event, NULL, SIGHUP, manager_dispatch_reload_signal, m);
if (r < 0)
return log_error_errno(r, "Failed to register SIGHUP handler: %m");
@@ -1298,6 +1304,8 @@ int main(int argc, char *argv[]) {
mkdir_label("/run/systemd/users", 0755);
mkdir_label("/run/systemd/sessions", 0755);
+ assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGHUP, SIGTERM, SIGINT, -1) >= 0);
+
r = manager_new(&m);
if (r < 0) {
log_error_errno(r, "Failed to allocate manager object: %m");