mirror of
https://github.com/troglobit/finit.git
synced 2026-10-31 13:00:32 +00:00
keventd: convert main loop to libuev
Replace the raw poll() + global running/reload_rules flag dance with libuev. All four signals (SIGUSR1, SIGTERM, SIGHUP, SIGCHLD) are now handled via uev_signal_init() -- libuev uses signalfd internally so the handlers run in normal main-loop context, not async signal context. The SIGCHLD handler waitpid(-1, WNOHANG) reaps any subprocess (modprobe loads, rule RUN+= helpers) instead of the old SIG_IGN auto-reap trick. Synchronous waitpid() in modprobe_load() and run_program() still works because signalfd queues the signal -- it only reaches sigchld_cb on the next main-loop iteration. The netlink receive loop becomes uevent_cb() registered via uev_io_init(), with the receive buffer passed via the watcher's arg slot (avoids file-static state). ENOBUFS and EINTR/EAGAIN are still tolerated, any other recv() error still panic()s. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
2 files changed
+88
-77
No files matched your search
@@ -15,8 +15,10 @@ keventd_CFLAGS = -W -Wall -Wextra -std=gnu99
|
||||
# handled via explicit checks where present. Matches systemd-udev policy.
|
||||
keventd_CFLAGS += -Wno-format-truncation
|
||||
keventd_CFLAGS += $(lite_CFLAGS)
|
||||
keventd_CFLAGS += $(uev_CFLAGS)
|
||||
keventd_CFLAGS += $(blkid_CFLAGS)
|
||||
keventd_LDADD = $(lite_LIBS)
|
||||
keventd_LDADD += $(uev_LIBS)
|
||||
keventd_LDADD += $(blkid_LIBS)
|
||||
|
||||
# Curated udev rules derived from eudev 3.2.14 (GPL-2.0-or-later).
|
||||
|
||||
Reference in new issue
Block a user