From: Lennart Poettering Date: Wed, 22 Aug 2012 03:02:33 +0000 (+0200) Subject: service: introduce a proper service result if the start limit is hit X-Git-Tag: v189~1 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=8d1b002a2e389e79a2414491523de549783abf73 service: introduce a proper service result if the start limit is hit --- diff --git a/TODO b/TODO index ee90aee73..c70a53c13 100644 --- a/TODO +++ b/TODO @@ -55,8 +55,6 @@ Features: * enforce limits on fds openened by socket units -* proper service failure code for services which hit the restart limit - * explore multiple service instances per listening socket idea * testing tool for socket activation: some binary that listens on a socket and passes it on using the usual socket activation protocol to some server. @@ -237,8 +235,6 @@ Features: * Add pretty name for seats in logind -* nspawn wants dev_setup() for /dev/fd/ and friends? - * selinux: merge systemd selinux access controls (dwalsh) * ConditionSecurity= should learn about IMA diff --git a/src/core/service.c b/src/core/service.c index f540752b6..807b34267 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -2508,7 +2508,7 @@ static int service_start(Unit *u) { /* Make sure we don't enter a busy loop of some kind. */ r = service_start_limit_test(s); if (r < 0) { - service_notify_sockets_dead(s, true); + service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false); return r; } @@ -3821,7 +3821,8 @@ static const char* const service_result_table[_SERVICE_RESULT_MAX] = { [SERVICE_FAILURE_EXIT_CODE] = "exit-code", [SERVICE_FAILURE_SIGNAL] = "signal", [SERVICE_FAILURE_CORE_DUMP] = "core-dump", - [SERVICE_FAILURE_WATCHDOG] = "watchdog" + [SERVICE_FAILURE_WATCHDOG] = "watchdog", + [SERVICE_FAILURE_START_LIMIT] = "start-limit" }; DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult); diff --git a/src/core/service.h b/src/core/service.h index 2a4dc30d0..d1e53bf72 100644 --- a/src/core/service.h +++ b/src/core/service.h @@ -98,6 +98,7 @@ typedef enum ServiceResult { SERVICE_FAILURE_SIGNAL, SERVICE_FAILURE_CORE_DUMP, SERVICE_FAILURE_WATCHDOG, + SERVICE_FAILURE_START_LIMIT, _SERVICE_RESULT_MAX, _SERVICE_RESULT_INVALID = -1 } ServiceResult;