From a3ada90a3753abcd420578e2226467237cbaf6fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 27 May 2024 09:47:51 +0200 Subject: [PATCH 1/3] various: remove unnecessary check before sd_event_source_set_enabled() sd_event_source_set_enabled() does the same check internally. --- src/core/automount.c | 3 --- src/core/socket.c | 3 --- src/core/timer.c | 4 +--- src/import/curl-util.c | 6 ++---- src/journal/journald-server.c | 10 ++++------ src/socket-proxy/socket-proxyd.c | 8 +++----- 6 files changed, 10 insertions(+), 24 deletions(-) diff --git a/src/core/automount.c b/src/core/automount.c index 6cb9d525c2..a7b08d60ad 100644 --- a/src/core/automount.c +++ b/src/core/automount.c @@ -734,9 +734,6 @@ static int automount_start_expire(Automount *a) { static void automount_stop_expire(Automount *a) { assert(a); - if (!a->expire_event_source) - return; - (void) sd_event_source_set_enabled(a->expire_event_source, SD_EVENT_OFF); } diff --git a/src/core/socket.c b/src/core/socket.c index 41147d4bf7..8839a26d50 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -1734,9 +1734,6 @@ static void socket_unwatch_fds(Socket *s) { if (p->fd < 0) continue; - if (!p->event_source) - continue; - r = sd_event_source_set_enabled(p->event_source, SD_EVENT_OFF); if (r < 0) log_unit_debug_errno(UNIT(s), r, "Failed to disable event source: %m"); diff --git a/src/core/timer.c b/src/core/timer.c index d7ce4733c0..7cb58cc2d9 100644 --- a/src/core/timer.c +++ b/src/core/timer.c @@ -514,7 +514,6 @@ static void timer_enter_waiting(Timer *t, bool time_change) { goto fail; } } else { - r = sd_event_add_time( UNIT(t)->manager->event, &t->monotonic_event_source, @@ -529,8 +528,7 @@ static void timer_enter_waiting(Timer *t, bool time_change) { (void) sd_event_source_set_description(t->monotonic_event_source, "timer-monotonic"); } - } else if (t->monotonic_event_source) { - + } else { r = sd_event_source_set_enabled(t->monotonic_event_source, SD_EVENT_OFF); if (r < 0) { log_unit_warning_errno(UNIT(t), r, "Failed to disable monotonic event source: %m"); diff --git a/src/import/curl-util.c b/src/import/curl-util.c index 1628f833a9..4b65f4619f 100644 --- a/src/import/curl-util.c +++ b/src/import/curl-util.c @@ -142,10 +142,8 @@ static int curl_glue_timer_callback(CURLM *curl, long timeout_ms, void *userdata } if (timeout_ms < 0) { - if (g->timer) { - if (sd_event_source_set_enabled(g->timer, SD_EVENT_OFF) < 0) - return -1; - } + if (sd_event_source_set_enabled(g->timer, SD_EVENT_OFF) < 0) + return -1; return 0; } diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 717c8e480e..211f5c3d83 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -784,12 +784,10 @@ static void server_sync(Server *s, bool wait) { "Failed to sync user journal, ignoring: %m"); } - if (s->sync_event_source) { - r = sd_event_source_set_enabled(s->sync_event_source, SD_EVENT_OFF); - if (r < 0) - log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT, - "Failed to disable sync timer source: %m"); - } + r = sd_event_source_set_enabled(s->sync_event_source, SD_EVENT_OFF); + if (r < 0) + log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT, + "Failed to disable sync timer source, ignoring: %m"); s->sync_scheduled = false; } diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c index dd9fa07153..7648a6ce7d 100644 --- a/src/socket-proxy/socket-proxyd.c +++ b/src/socket-proxy/socket-proxyd.c @@ -472,11 +472,9 @@ static int add_connection_socket(Context *context, int fd) { return 0; } - if (context->idle_time) { - r = sd_event_source_set_enabled(context->idle_time, SD_EVENT_OFF); - if (r < 0) - log_warning_errno(r, "Unable to disable idle timer, continuing: %m"); - } + r = sd_event_source_set_enabled(context->idle_time, SD_EVENT_OFF); + if (r < 0) + log_warning_errno(r, "Unable to disable idle timer, continuing: %m"); c = new(Connection, 1); if (!c) { From 8ca77ee645717bdc98051831883473b62a86c9b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 28 May 2024 20:02:26 +0200 Subject: [PATCH 2/3] sd-event: emit a debug line if disabling unreffed source fails We can only do a debug log from the library, so let's add that. Callers probably want to provide some hint when that happens, but it's very unlikely so not worth coding in every caller. And drop the now-unnecessary handling in unit_dequeue_rewatch_pids(). --- src/core/unit.c | 8 -------- src/libsystemd/sd-event/sd-event.c | 9 +++++++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/core/unit.c b/src/core/unit.c index 1dea0db3fe..07ec132f30 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -2978,16 +2978,8 @@ int unit_enqueue_rewatch_pids(Unit *u) { } void unit_dequeue_rewatch_pids(Unit *u) { - int r; assert(u); - if (!u->rewatch_pids_event_source) - return; - - r = sd_event_source_set_enabled(u->rewatch_pids_event_source, SD_EVENT_OFF); - if (r < 0) - log_warning_errno(r, "Failed to disable event source for tidying watched PIDs, ignoring: %m"); - u->rewatch_pids_event_source = sd_event_source_disable_unref(u->rewatch_pids_event_source); } diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c index a1305ef014..2388ebe635 100644 --- a/src/libsystemd/sd-event/sd-event.c +++ b/src/libsystemd/sd-event/sd-event.c @@ -474,8 +474,13 @@ _public_ sd_event* sd_event_unref(sd_event *e) { _unused_ _cleanup_(sd_event_unrefp) sd_event *_ref = sd_event_ref(e); _public_ sd_event_source* sd_event_source_disable_unref(sd_event_source *s) { - if (s) - (void) sd_event_source_set_enabled(s, SD_EVENT_OFF); + int r; + + r = sd_event_source_set_enabled(s, SD_EVENT_OFF); + if (r < 0) + log_debug_errno(r, "Failed to disable event source %p (%s): %m", + s, strna(s->description)); + return sd_event_source_unref(s); } From 415bf4e01ed41bde6a85018e5e42bfa288bafb1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 28 May 2024 20:14:48 +0200 Subject: [PATCH 3/3] sd-event: use consistent style for '*' in signatures --- src/libsystemd/sd-event/sd-event.c | 10 +++++----- src/systemd/sd-event.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c index 2388ebe635..f1aed5de60 100644 --- a/src/libsystemd/sd-event/sd-event.c +++ b/src/libsystemd/sd-event/sd-event.c @@ -185,7 +185,7 @@ static thread_local sd_event *default_event = NULL; static void source_disconnect(sd_event_source *s); static void event_gc_inode_data(sd_event *e, struct inode_data *d); -static sd_event *event_resolve(sd_event *e) { +static sd_event* event_resolve(sd_event *e) { return e == SD_EVENT_DEFAULT ? default_event : e; } @@ -341,7 +341,7 @@ static void free_clock_data(struct clock_data *d) { prioq_free(d->latest); } -static sd_event *event_free(sd_event *e) { +static sd_event* event_free(sd_event *e) { sd_event_source *s; assert(e); @@ -446,7 +446,7 @@ fail: } /* Define manually so we can add the origin check */ -_public_ sd_event *sd_event_ref(sd_event *e) { +_public_ sd_event* sd_event_ref(sd_event *e) { if (!e) return NULL; if (event_origin_changed(e)) @@ -1183,7 +1183,7 @@ static int source_set_pending(sd_event_source *s, bool b) { return 1; } -static sd_event_source *source_new(sd_event *e, bool floating, EventSourceType type) { +static sd_event_source* source_new(sd_event *e, bool floating, EventSourceType type) { /* Let's allocate exactly what we need. Note that the difference of the smallest event source * structure to the largest is 144 bytes on x86-64 at the time of writing, i.e. more than two cache @@ -2630,7 +2630,7 @@ _public_ int sd_event_source_get_description(sd_event_source *s, const char **de return 0; } -_public_ sd_event *sd_event_source_get_event(sd_event_source *s) { +_public_ sd_event* sd_event_source_get_event(sd_event_source *s) { assert_return(s, NULL); assert_return(!event_origin_changed(s->event), NULL); diff --git a/src/systemd/sd-event.h b/src/systemd/sd-event.h index a876add00c..17479bd4e5 100644 --- a/src/systemd/sd-event.h +++ b/src/systemd/sd-event.h @@ -123,7 +123,7 @@ sd_event_source* sd_event_source_ref(sd_event_source *s); sd_event_source* sd_event_source_unref(sd_event_source *s); sd_event_source* sd_event_source_disable_unref(sd_event_source *s); -sd_event *sd_event_source_get_event(sd_event_source *s); +sd_event* sd_event_source_get_event(sd_event_source *s); void* sd_event_source_get_userdata(sd_event_source *s); void* sd_event_source_set_userdata(sd_event_source *s, void *userdata);