1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-28 03:25:31 +03:00

manager: always close idle pipe when sending ready notification

This fixes a bug introduced by 6d93265955.

The commit makes several functions skipped if the manager is already
in finished state, as
> In manager_check_finished(), more steps are skipped if MANAGER_IS_FINISHED().
> Those steps are idempotent, but no need to waste cycles trying to do them
> more than once.

However, the idle pipe may be re-opened after manager is finished:
manager_dispatch_run_queue() -> manager_watch_idle_pipe().
So, the closing the pipe is not idempotent here.

Fixes #21889.
This commit is contained in:
Yu Watanabe 2021-12-29 12:04:46 +09:00 committed by Luca Boccassi
parent 5204355861
commit 9c1b17c3dc

View File

@ -3557,14 +3557,14 @@ void manager_check_finished(Manager *m) {
manager_send_ready(m);
/* Notify Type=idle units that we are done now */
manager_close_idle_pipe(m);
if (MANAGER_IS_FINISHED(m))
return;
manager_flip_auto_status(m, false, "boot finished");
/* Notify Type=idle units that we are done now */
manager_close_idle_pipe(m);
/* Turn off confirm spawn now */
m->confirm_spawn = NULL;