From 45f540a2974dc732820d20a0e73cfffc94766a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 4 Apr 2023 12:05:16 +0200 Subject: [PATCH] manager: remove transient unit directory during startup I was testing transient units and user@.service crashed. I restarted it, and tried to create a transient unit. It failed because /run/user/1000/systemd/transient/ remained after the previous aborted run: Failed to start transient service unit: Unit run-u0.service was already loaded or has a fragment file. Remove the directory during initial startup so we don't get confused by our own files. --- src/core/manager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/manager.c b/src/core/manager.c index dcc10266ac..47a502df7f 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -1861,6 +1861,10 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds, const char *roo /* This block is (optionally) done with the reloading counter bumped */ _unused_ _cleanup_(manager_reloading_stopp) Manager *reloading = NULL; + /* Make sure we don't have a left-over from a previous run */ + if (!serialization) + (void) rm_rf(m->lookup_paths.transient, 0); + /* If we will deserialize make sure that during enumeration this is already known, so we increase the * counter here already */ if (serialization)