From 8e4ef4a18c164c71a76da636b3877692038b91ec Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 16 Nov 2025 05:43:59 +0900 Subject: [PATCH 1/2] sd-event: do not ignore result of callbacks Follow-up for 4c8b6d636c92e84f4b40db5656db58f71f397a1d and 6aff6d3ffc8a481bb663ac4dd0cf479845a6e24f. Fixes CID#1643218 and friends. --- src/libsystemd/sd-event/sd-event.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c index a211d62f00..044cdf246d 100644 --- a/src/libsystemd/sd-event/sd-event.c +++ b/src/libsystemd/sd-event/sd-event.c @@ -4249,12 +4249,6 @@ static int source_dispatch(sd_event_source *s) { s->dispatching = false; - /* More post sources might have been added while executing the callback, let's make sure - * those are marked pending as well. */ - r = maybe_mark_post_sources_pending(saved_type, saved_event); - if (r < 0) - return r; - finish: if (r < 0) { log_debug_errno(r, "Event source %s (type %s) returned error, %s: %m", @@ -4271,6 +4265,12 @@ finish: else if (r < 0) assert_se(sd_event_source_set_enabled(s, SD_EVENT_OFF) >= 0); + /* More post sources might have been added while executing the callback, let's make sure + * those are marked pending as well. */ + r = maybe_mark_post_sources_pending(saved_type, saved_event); + if (r < 0) + return r; + return 1; } From de8ea7e219ca6dffc34939c57deae6f4f1421062 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 16 Nov 2025 05:49:33 +0900 Subject: [PATCH 2/2] test: add missing assertion Follow-up for 5a5cb6ba50594355734ff58487d2272a86b741b1. Fixes CID#1643217. --- src/libsystemd/sd-event/test-event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsystemd/sd-event/test-event.c b/src/libsystemd/sd-event/test-event.c index eb986c9e08..16bbd1296b 100644 --- a/src/libsystemd/sd-event/test-event.c +++ b/src/libsystemd/sd-event/test-event.c @@ -1075,7 +1075,7 @@ static int exit_on_idle_defer_handler(sd_event_source *s, void *userdata) { /* Disable ourselves, which should trigger exit-on-idle after the second iteration */ if (*c == 2) - sd_event_source_set_enabled(s, SD_EVENT_OFF); + ASSERT_OK(sd_event_source_set_enabled(s, SD_EVENT_OFF)); return 0; }