From 7a0d4a3d16855bac2ce2f2973122dae1ed069dff Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Wed, 19 Feb 2014 13:24:38 +0100 Subject: [PATCH] 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. --- src/libsystemd/sd-event/sd-event.c | 4 ++-- 1 file 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: -- 2.30.2