From de02234cb79ad8196e176079a2c3e94b2932e0fa Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Wed, 24 Jul 2019 11:22:32 +0200 Subject: [PATCH] dmeventd configurable idle exit time dmeventd nominally exits after 1 hour of idle time. There are use cases for this, esp. with socket activation, but also cases where users don't expect dmeventd to exit. Provide a tuning knob via environment variable, DMEVENTD_IDLE_EXIT_TIMEOUT, that can be -1 to not exit, or a configurable time for different idle exit. Signed-off-by: Robin H. Johnson Fixes: https://bugs.gentoo.org/682556 --- daemons/dmeventd/dmeventd.c | 15 +++++++++++++-- man/dmeventd.8_main | 4 ++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c index a29b5dc17..cb6cda523 100644 --- a/daemons/dmeventd/dmeventd.c +++ b/daemons/dmeventd/dmeventd.c @@ -2272,6 +2272,17 @@ int main(int argc, char *argv[]) }; time_t now, idle_exit_timeout = DMEVENTD_IDLE_EXIT_TIMEOUT; + /* Provide a basic way to config the idle timeout */ + char* idle_exit_timeout_env = getenv("DMEVENTD_IDLE_EXIT_TIMEOUT") ? : NULL; + if(NULL != idle_exit_timeout_env) { + char* endptr; + idle_exit_timeout = strtol(idle_exit_timeout_env, &endptr, 10); + if (errno == ERANGE || *endptr != '\0') { + fprintf(stderr, "DMEVENTD_IDLE_EXIT_TIMEOUT: bad time input\n"); + exit(EXIT_FAILURE); + } + } + optopt = optind = opterr = 0; optarg = (char*) ""; while ((opt = getopt(argc, argv, ":?e:fhiVdlR")) != EOF) { @@ -2379,7 +2390,7 @@ int main(int argc, char *argv[]) _process_initial_registrations(); for (;;) { - if (_idle_since) { + if (_idle_since || _exit_now) { if (_exit_now) { if (_exit_now == DM_SCHEDULED_EXIT) break; /* Only prints shutdown message */ @@ -2388,7 +2399,7 @@ int main(int argc, char *argv[]) (long) (time(NULL) - _idle_since)); break; } - if (idle_exit_timeout) { + if (idle_exit_timeout && idle_exit_timeout > 0) { now = time(NULL); if (now < _idle_since) _idle_since = now; /* clock change? */ diff --git a/man/dmeventd.8_main b/man/dmeventd.8_main index 7a780da7c..02857d4af 100644 --- a/man/dmeventd.8_main +++ b/man/dmeventd.8_main @@ -188,6 +188,10 @@ is processed. Variable is set by thin and vdo plugin to prohibit recursive interaction with dmeventd by any executed lvm2 command from a thin_command, vdo_command environment. +.TP +.B DMEVENTD_IDLE_EXIT_TIMEOUT +Configure the dmeventd idle exit timeout behavior, value in seconds. Default +is 3600 (1 hour). -1 means do not exit. . .SH SEE ALSO . -- 2.43.0