summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2014-02-19 13:24:38 +0100
committerDavid Herrmann <dh.herrmann@gmail.com>2014-02-19 13:24:38 +0100
commit7a0d4a3d16855bac2ce2f2973122dae1ed069dff (patch)
treeced4ec82ff895582c816f8d28663a0f1bc12cbee
parentb67f562c9cac44bd78b24f5aae78a1797c5d4182 (diff)
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.
-rw-r--r--src/libsystemd/sd-event/sd-event.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
index f33a9ecf9..cf2efa68a 100644
--- a/src/libsystemd/sd-event/sd-event.c
+++ b/src/libsystemd/sd-event/sd-event.c
@@ -1286,8 +1286,6 @@ _public_ int sd_event_source_set_enabled(sd_event_source *s, int m) {
break;
case SOURCE_CHILD:
- s->enabled = m;
-
if (s->enabled == SD_EVENT_OFF) {
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);
}
}
+
+ s->enabled = m;
break;
case SOURCE_EXIT: