summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/manager.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/core/manager.c b/src/core/manager.c
index ce9b27ece7..9226cd2ab7 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -1822,7 +1822,11 @@ static bool manager_dbus_is_running(Manager *m, bool deserialized) {
u = manager_get_unit(m, SPECIAL_DBUS_SERVICE);
if (!u)
return false;
- if (!IN_SET((deserialized ? SERVICE(u)->deserialized_state : SERVICE(u)->state), SERVICE_RUNNING, SERVICE_RELOAD))
+ if (!IN_SET((deserialized ? SERVICE(u)->deserialized_state : SERVICE(u)->state),
+ SERVICE_RUNNING,
+ SERVICE_RELOAD,
+ SERVICE_RELOAD_NOTIFY,
+ SERVICE_RELOAD_SIGNAL))
return false;
return true;
@@ -3959,6 +3963,7 @@ static int manager_execute_generators(Manager *m, char **paths, bool remount_ro)
}
static int manager_run_generators(Manager *m) {
+ ForkFlags flags = FORK_RESET_SIGNALS | FORK_WAIT | FORK_NEW_MOUNTNS | FORK_MOUNTNS_SLAVE;
_cleanup_strv_free_ char **paths = NULL;
int r;
@@ -3989,9 +3994,12 @@ static int manager_run_generators(Manager *m) {
goto finish;
}
- r = safe_fork("(sd-gens)",
- FORK_RESET_SIGNALS | FORK_WAIT | FORK_NEW_MOUNTNS | FORK_MOUNTNS_SLAVE | FORK_PRIVATE_TMP,
- NULL);
+ /* On some systems /tmp/ doesn't exist, and on some other systems we cannot create it at all. Avoid
+ * trying to mount a private tmpfs on it as there's no one size fits all. */
+ if (is_dir("/tmp", /* follow= */ false) > 0)
+ flags |= FORK_PRIVATE_TMP;
+
+ r = safe_fork("(sd-gens)", flags, NULL);
if (r == 0) {
r = manager_execute_generators(m, paths, /* remount_ro= */ true);
_exit(r >= 0 ? EXIT_SUCCESS : EXIT_FAILURE);