mirror of
https://github.com/systemd/systemd.git
synced 2024-12-15 05:03:34 +08:00
event: fix crash on child-source state modifications
Setting a child-source state to anything but SD_EVENT_OFF currently does nothing. The condition logic is flawed. Move the state update *below* the test for the previous state. Fixes a crash if you call: sd_event_source_set_enabled(source, SD_EVENT_ON); sd_event_source_unref(source); on a child-source in its own callback.
This commit is contained in:
parent
b67f562c9c
commit
7a0d4a3d16
@ -1286,8 +1286,6 @@ _public_ int sd_event_source_set_enabled(sd_event_source *s, int m) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SOURCE_CHILD:
|
case SOURCE_CHILD:
|
||||||
s->enabled = m;
|
|
||||||
|
|
||||||
if (s->enabled == SD_EVENT_OFF) {
|
if (s->enabled == SD_EVENT_OFF) {
|
||||||
s->event->n_enabled_child_sources++;
|
s->event->n_enabled_child_sources++;
|
||||||
|
|
||||||
@ -1296,6 +1294,8 @@ _public_ int sd_event_source_set_enabled(sd_event_source *s, int m) {
|
|||||||
event_update_signal_fd(s->event);
|
event_update_signal_fd(s->event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s->enabled = m;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SOURCE_EXIT:
|
case SOURCE_EXIT:
|
||||||
|
Loading…
Reference in New Issue
Block a user