sd-event: don't require a signal event source to be enabled for the child event source to work

This commit is contained in:
Lennart Poettering 2014-07-11 16:48:35 +02:00
parent eea1aadb5b
commit 92daebc0d0
1 changed files with 9 additions and 7 deletions

View File

@ -1919,14 +1919,13 @@ static int process_signal(sd_event *e, uint32_t events) {
int r;
assert(e);
assert(e->signal_sources);
assert_return(events == EPOLLIN, -EIO);
for (;;) {
struct signalfd_siginfo si;
ssize_t ss;
sd_event_source *s;
sd_event_source *s = NULL;
ss = read(e->signal_fd, &si, sizeof(si));
if (ss < 0) {
@ -1941,16 +1940,19 @@ static int process_signal(sd_event *e, uint32_t events) {
read_one = true;
s = e->signal_sources[si.ssi_signo];
if (si.ssi_signo == SIGCHLD) {
r = process_child(e);
if (r < 0)
return r;
if (r > 0 || !s)
if (r > 0)
continue;
} else
if (!s)
return -EIO;
}
if (e->signal_sources)
s = e->signal_sources[si.ssi_signo];
if (!s)
continue;
s->signal.siginfo = si;
r = source_set_pending(s, true);