sd-event: don't require a signal event source to be enabled for the child event source to work
This commit is contained in:
parent
eea1aadb5b
commit
92daebc0d0
|
@ -1919,14 +1919,13 @@ static int process_signal(sd_event *e, uint32_t events) {
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(e);
|
assert(e);
|
||||||
assert(e->signal_sources);
|
|
||||||
|
|
||||||
assert_return(events == EPOLLIN, -EIO);
|
assert_return(events == EPOLLIN, -EIO);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
struct signalfd_siginfo si;
|
struct signalfd_siginfo si;
|
||||||
ssize_t ss;
|
ssize_t ss;
|
||||||
sd_event_source *s;
|
sd_event_source *s = NULL;
|
||||||
|
|
||||||
ss = read(e->signal_fd, &si, sizeof(si));
|
ss = read(e->signal_fd, &si, sizeof(si));
|
||||||
if (ss < 0) {
|
if (ss < 0) {
|
||||||
|
@ -1941,16 +1940,19 @@ static int process_signal(sd_event *e, uint32_t events) {
|
||||||
|
|
||||||
read_one = true;
|
read_one = true;
|
||||||
|
|
||||||
s = e->signal_sources[si.ssi_signo];
|
|
||||||
if (si.ssi_signo == SIGCHLD) {
|
if (si.ssi_signo == SIGCHLD) {
|
||||||
r = process_child(e);
|
r = process_child(e);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
if (r > 0 || !s)
|
if (r > 0)
|
||||||
continue;
|
continue;
|
||||||
} else
|
}
|
||||||
if (!s)
|
|
||||||
return -EIO;
|
if (e->signal_sources)
|
||||||
|
s = e->signal_sources[si.ssi_signo];
|
||||||
|
|
||||||
|
if (!s)
|
||||||
|
continue;
|
||||||
|
|
||||||
s->signal.siginfo = si;
|
s->signal.siginfo = si;
|
||||||
r = source_set_pending(s, true);
|
r = source_set_pending(s, true);
|
||||||
|
|
Loading…
Reference in a new issue