diff --git a/src/libsystemd/sd-event/event-util.c b/src/libsystemd/sd-event/event-util.c index 482df37225..9e0dbd30c3 100644 --- a/src/libsystemd/sd-event/event-util.c +++ b/src/libsystemd/sd-event/event-util.c @@ -274,16 +274,17 @@ int event_forward_signals( return -ENOMEM; FOREACH_ARRAY(sig, signals, n_signals) { - r = sd_event_add_signal(e, &sources[n_sources], *sig | SD_EVENT_SIGNAL_PROCMASK, event_forward_signal_callback, child); + _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL; + r = sd_event_add_signal(e, &s, *sig | SD_EVENT_SIGNAL_PROCMASK, event_forward_signal_callback, child); if (r < 0) return r; - r = sd_event_source_set_destroy_callback(sources[n_sources], event_forward_signal_destroy); + r = sd_event_source_set_destroy_callback(s, event_forward_signal_destroy); if (r < 0) return r; sd_event_source_ref(child); - n_sources++; + sources[n_sources++] = TAKE_PTR(s); } *ret_sources = TAKE_PTR(sources);