acpid: exit cleanly when acpi scheme already registered (hwd double-spawn)
This commit is contained in:
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user