]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: make RuntimeDirectoryPreserve= works with non-service units
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 22 Aug 2019 15:08:16 +0000 (00:08 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 22 Aug 2019 15:08:16 +0000 (00:08 +0900)
src/core/mount.c
src/core/service.c
src/core/socket.c
src/core/swap.c
src/core/unit.c
src/core/unit.h

index 4f37d3e9a9bfab769a8ba15d2f3e0022fb080bae..959b8fbed28896e38877ddbac78df1921796e2b6 100644 (file)
@@ -826,7 +826,7 @@ static void mount_enter_dead(Mount *m, MountResult f) {
 
         m->exec_runtime = exec_runtime_unref(m->exec_runtime, true);
 
-        exec_context_destroy_runtime_directory(&m->exec_context, UNIT(m)->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
+        unit_destroy_runtime_directory(UNIT(m), &m->exec_context);
 
         unit_unref_uid_gid(UNIT(m), true);
 
@@ -1996,6 +1996,8 @@ const UnitVTable mount_vtable = {
         .active_state = mount_active_state,
         .sub_state_to_string = mount_sub_state_to_string,
 
+        .will_restart = unit_will_restart_default,
+
         .may_gc = mount_may_gc,
 
         .sigchld_event = mount_sigchld_event,
index d264b9a2811de0bb39654019388f9431819bbf97..61e18de5fb400ba5331e198110610ea8f8e41a47 100644 (file)
@@ -1721,12 +1721,8 @@ static bool service_will_restart(Unit *u) {
                 return true;
         if (s->state == SERVICE_AUTO_RESTART)
                 return true;
-        if (!UNIT(s)->job)
-                return false;
-        if (UNIT(s)->job->type == JOB_START)
-                return true;
 
-        return false;
+        return unit_will_restart_default(u);
 }
 
 static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
index 46fe405a17d7212e12e490065ffc4d122cec9085..e94d6feef9a53ad61c003bbcb3f536cd06ac2524 100644 (file)
@@ -2035,7 +2035,7 @@ static void socket_enter_dead(Socket *s, SocketResult f) {
 
         s->exec_runtime = exec_runtime_unref(s->exec_runtime, true);
 
-        exec_context_destroy_runtime_directory(&s->exec_context, UNIT(s)->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
+        unit_destroy_runtime_directory(UNIT(s), &s->exec_context);
 
         unit_unref_uid_gid(UNIT(s), true);
 
@@ -3353,6 +3353,8 @@ const UnitVTable socket_vtable = {
         .active_state = socket_active_state,
         .sub_state_to_string = socket_sub_state_to_string,
 
+        .will_restart = unit_will_restart_default,
+
         .may_gc = socket_may_gc,
 
         .sigchld_event = socket_sigchld_event,
index 74381c0c95b4481bd7bdd7f189fbb4b700dc7ad6..4ce9d06280d4faaa6cba4262a8ace0ac4ff79c10 100644 (file)
@@ -683,7 +683,7 @@ static void swap_enter_dead(Swap *s, SwapResult f) {
 
         s->exec_runtime = exec_runtime_unref(s->exec_runtime, true);
 
-        exec_context_destroy_runtime_directory(&s->exec_context, UNIT(s)->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
+        unit_destroy_runtime_directory(UNIT(s), &s->exec_context);
 
         unit_unref_uid_gid(UNIT(s), true);
 
@@ -1529,6 +1529,8 @@ const UnitVTable swap_vtable = {
         .active_state = swap_active_state,
         .sub_state_to_string = swap_sub_state_to_string,
 
+        .will_restart = unit_will_restart_default,
+
         .may_gc = swap_may_gc,
 
         .sigchld_event = swap_sigchld_event,
index ff979ffdd60917b5c34c1a49252c1a036f035b68..a2944cbc15c2661b1f64493eec1a62a67da62d33 100644 (file)
@@ -4069,6 +4069,17 @@ bool unit_active_or_pending(Unit *u) {
         return false;
 }
 
+bool unit_will_restart_default(Unit *u) {
+        assert(u);
+
+        if (!u->job)
+                return false;
+        if (u->job->type == JOB_START)
+                return true;
+
+        return false;
+}
+
 bool unit_will_restart(Unit *u) {
         assert(u);
 
index 00436dc6641fd8d83e90a621c40f0b5b94328c69..7f1d2f651cd5fdf8cb2d8625dbd453bb7c1cca87 100644 (file)
@@ -752,6 +752,7 @@ const char *unit_slice_name(Unit *u);
 bool unit_stop_pending(Unit *u) _pure_;
 bool unit_inactive_or_pending(Unit *u) _pure_;
 bool unit_active_or_pending(Unit *u);
+bool unit_will_restart_default(Unit *u);
 bool unit_will_restart(Unit *u);
 
 int unit_add_default_target_dependency(Unit *u, Unit *target);