chiark / gitweb /
core: uninstall cgroup agent only if we are running outside of a container
[elogind.git] / src / core / main.c
index 1d188e0bfe349a4b35952b38e80bdb0ef2af894e..0ba1d15033253379a4240920054545d88284fc2a 100644 (file)
@@ -1055,15 +1055,16 @@ static int prepare_reexecute(Manager *m, FILE **_f, FDSet **_fds, bool switching
         assert(_f);
         assert(_fds);
 
-        /* Make sure nothing is really destructed when we shut down */
-        m->n_reloading ++;
-
         r = manager_open_serialization(m, &f);
         if (r < 0) {
                 log_error("Failed to create serialization file: %s", strerror(-r));
                 goto fail;
         }
 
+        /* Make sure nothing is really destructed when we shut down */
+        m->n_reloading ++;
+        bus_broadcast_reloading(m, true);
+
         fds = fdset_new();
         if (!fds) {
                 r = -ENOMEM;
@@ -1942,9 +1943,11 @@ finish:
                         watchdog_close(true);
                 }
 
-                /* avoid the creation of new processes forked by the kernel; at this
-                 * point, we will not listen to the signals anyway */
-                cg_uninstall_release_agent(SYSTEMD_CGROUP_CONTROLLER);
+                /* Avoid the creation of new processes forked by the
+                 * kernel; at this point, we will not listen to the
+                 * signals anyway */
+                if (detect_container(NULL) <= 0)
+                        cg_uninstall_release_agent(SYSTEMD_CGROUP_CONTROLLER);
 
                 execve(SYSTEMD_SHUTDOWN_BINARY_PATH, (char **) command_line, env_block);
                 free(env_block);