aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsin <sin@2f30.org>2014-02-10 20:04:58 +0000
committersin <sin@2f30.org>2014-02-10 20:04:58 +0000
commit7fd10119bbb606d8e186e4e43bae3d1ab17e4184 (patch)
treedd1e86af51ba9113620c616321d69ab19a1b25c6
parent514b100944d0b61d8e8a295ab3cd534be4cfd344 (diff)
Use sigwait() instead of signalfd()
-rw-r--r--sinit.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/sinit.c b/sinit.c
index 8f3b40e..e48c034 100644
--- a/sinit.c
+++ b/sinit.c
@@ -31,10 +31,8 @@ static sigset_t set;
int
main(void)
{
- struct signalfd_siginfo si;
- int fd;
+ int sig;
int i;
- ssize_t n;
if (getpid() != 1)
return EXIT_FAILURE;
@@ -45,20 +43,12 @@ main(void)
sigaddset(&set, sigmap[i].sig);
sigprocmask(SIG_BLOCK, &set, NULL);
- fd = signalfd(-1, &set, SFD_CLOEXEC);
- if (fd < 0)
- eprintf("sinit: signalfd:");
-
spawn(rcinitcmd);
while (1) {
- n = read(fd, &si, sizeof(si));
- if (n < 0)
- eprintf("sinit: read:");
- if (n != sizeof(si))
- continue;
+ sigwait(&set, &sig);
for (i = 0; i < LEN(sigmap); i++)
- if (sigmap[i].sig == si.ssi_signo)
+ if (sigmap[i].sig == sig)
sigmap[i].handler();
}