This fixes a bug introduced by
6d9326595592f98e8126eacb4176acd8c3516d5c.
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.
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;