]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/service: introduce service_live_mount_finish()
authorMike Yuan <me@yhndnzj.com>
Wed, 16 Oct 2024 19:18:04 +0000 (21:18 +0200)
committerMike Yuan <me@yhndnzj.com>
Tue, 22 Oct 2024 17:19:47 +0000 (19:19 +0200)
that combines updating Service.live_mount_result and
service_mount_request_reply()

src/core/service.c

index f02f5ae74998a37c1811dc664b04af50440c2a36..ab4467ab8aaef1e277848e3fff8465d1a8291f2c 100644 (file)
@@ -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;