From d69afbc7324af6440a6834237bc7cd3ae58f569a Mon Sep 17 00:00:00 2001 From: Red Bear OS Date: Wed, 15 Jul 2026 22:56:00 +0900 Subject: [PATCH] acpid: exit cleanly when acpi scheme already registered (hwd double-spawn) --- drivers/acpid/src/main.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/acpid/src/main.rs b/drivers/acpid/src/main.rs index 6aa29ccf97..ace3ca8af2 100644 --- a/drivers/acpid/src/main.rs +++ b/drivers/acpid/src/main.rs @@ -111,8 +111,21 @@ fn daemon(daemon: daemon::Daemon) -> ! { .subscribe(socket.inner().raw(), 1, EventFlags::READ) .expect("acpid: failed to register scheme socket for event queue"); - register_sync_scheme(&socket, "acpi", &mut scheme) - .expect("acpid: failed to register acpi scheme to namespace"); + if let Err(err) = register_sync_scheme(&socket, "acpi", &mut scheme) { + if err.errno == syscall::EEXIST { + // acpid is reachable via BOTH 41_acpid.service and hwd's ACPI + // backend (drivers/hwd/src/backend/acpi.rs spawns "acpid"), so a + // second instance races to register the "acpi" scheme. That is + // redundant, not fatal: exit cleanly so the duplicate does not + // abort and wedge the boot — the first instance keeps serving. + log::info!("acpid: 'acpi' scheme already registered; exiting duplicate instance"); + std::process::exit(0); + } + panic!( + "acpid: failed to register acpi scheme to namespace: {}", + err + ); + } libredox::call::setrens(0, 0).expect("acpid: failed to enter null namespace");