From a6eeca9a001bd7b9b1c31fdc4347be547d506892 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Wed, 16 Oct 2024 21:18:04 +0200 Subject: [PATCH] core/service: introduce service_live_mount_finish() that combines updating Service.live_mount_result and service_mount_request_reply() --- src/core/service.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/core/service.c b/src/core/service.c index f02f5ae7499..ab4467ab8aa 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -2888,14 +2888,16 @@ static int service_start(Unit *u) { return 1; } -static void service_mount_request_reply(Service *s, bool success, const char *error) { +static void service_live_mount_finish(Service *s, ServiceResult f, const char *error) { assert(s); assert(error); + s->live_mount_result = f; + if (!s->mount_request) return; - if (success) { + if (f == SERVICE_SUCCESS) { (void) sd_bus_reply_method_return(s->mount_request, NULL); log_unit_debug(UNIT(s), "'%s' method succeeded", @@ -2940,7 +2942,7 @@ static int service_stop(Unit *u) { case SERVICE_MOUNTING: service_kill_control_process(s); - service_mount_request_reply(s, /* success= */ false, BUS_ERROR_UNIT_INACTIVE); + service_live_mount_finish(s, SERVICE_FAILURE_PROTOCOL, BUS_ERROR_UNIT_INACTIVE); _fallthrough_; case SERVICE_CONDITION: case SERVICE_START_PRE: @@ -4185,9 +4187,7 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) { break; case SERVICE_MOUNTING: - s->live_mount_result = f; - - service_mount_request_reply(s, f == SERVICE_SUCCESS, SD_BUS_ERROR_FAILED); + service_live_mount_finish(s, f, SD_BUS_ERROR_FAILED); service_enter_running(s, SERVICE_SUCCESS); break; @@ -4302,8 +4302,7 @@ static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *us case SERVICE_MOUNTING: log_unit_warning(UNIT(s), "Mount operation timed out. Killing mount process."); service_kill_control_process(s); - s->live_mount_result = SERVICE_FAILURE_TIMEOUT; - service_mount_request_reply(s, /* success= */ false, SD_BUS_ERROR_TIMEOUT); + service_live_mount_finish(s, SERVICE_FAILURE_TIMEOUT, SD_BUS_ERROR_TIMEOUT); service_enter_running(s, SERVICE_SUCCESS); break;