From: Zbigniew Jędrzejewski-Szmek Date: Tue, 14 Jun 2022 12:40:30 +0000 (+0200) Subject: sd-event: let sd_event_source_set_enabled accept NULL X-Git-Tag: v252-rc1~751^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e922b05844fd3c4db51b565c1b946eb2f92f0fd;p=thirdparty%2Fsystemd.git sd-event: let sd_event_source_set_enabled accept NULL Same story as before: disabling a non-existent event source shouldn't need to be guarded by an if. I retained the wrapper so that that we don't have to say SD_EVENT_OFF in the many places where this is called. --- diff --git a/man/sd_event_source_set_enabled.xml b/man/sd_event_source_set_enabled.xml index d6cdf85eda9..5f13fc101d0 100644 --- a/man/sd_event_source_set_enabled.xml +++ b/man/sd_event_source_set_enabled.xml @@ -53,16 +53,15 @@ Description - sd_event_source_set_enabled() may be - used to enable or disable the event source object specified as - source. The enabled - parameter takes one of SD_EVENT_ON (to - enable), SD_EVENT_OFF (to disable) or - SD_EVENT_ONESHOT. If invoked with - SD_EVENT_ONESHOT the event source will be - enabled but automatically reset to - SD_EVENT_OFF after the event source was - dispatched once. + sd_event_source_set_enabled() may be used to enable or disable the event + source object specified as source. The enabled parameter + takes one of SD_EVENT_ON (to enable), SD_EVENT_OFF (to disable) + or SD_EVENT_ONESHOT. If invoked with SD_EVENT_ONESHOT the event + source will be enabled but automatically reset to SD_EVENT_OFF after one dispatch. + For SD_EVENT_OFF, the event source source may be + NULL, in which case the function does nothing. Otherwise, + source must be a valid pointer to an sd_event_source + object. Event sources that are disabled will not result in event loop wakeups and will not be dispatched, until they are enabled diff --git a/src/libsystemd/sd-event/event-util.c b/src/libsystemd/sd-event/event-util.c index 3a7afe9ae3c..a36eba90293 100644 --- a/src/libsystemd/sd-event/event-util.c +++ b/src/libsystemd/sd-event/event-util.c @@ -109,13 +109,6 @@ int event_reset_time_relative( return event_reset_time(e, s, clock, usec_add(usec_now, usec), accuracy, callback, userdata, priority, description, force_reset); } -int event_source_disable(sd_event_source *s) { - if (!s) - return 0; - - return sd_event_source_set_enabled(s, SD_EVENT_OFF); -} - int event_add_time_change(sd_event *e, sd_event_source **ret, sd_event_io_handler_t callback, void *userdata) { _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL; _cleanup_close_ int fd = -1; diff --git a/src/libsystemd/sd-event/event-util.h b/src/libsystemd/sd-event/event-util.h index 7bab42ed8fe..c1855844123 100644 --- a/src/libsystemd/sd-event/event-util.h +++ b/src/libsystemd/sd-event/event-util.h @@ -27,6 +27,8 @@ int event_reset_time_relative( int64_t priority, const char *description, bool force_reset); -int event_source_disable(sd_event_source *s); +static inline int event_source_disable(sd_event_source *s) { + return sd_event_source_set_enabled(s, SD_EVENT_OFF); +} int event_add_time_change(sd_event *e, sd_event_source **ret, sd_event_io_handler_t callback, void *userdata); diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c index 94431d0725c..cea1c009d61 100644 --- a/src/libsystemd/sd-event/sd-event.c +++ b/src/libsystemd/sd-event/sd-event.c @@ -2594,8 +2594,13 @@ static int event_source_online( _public_ int sd_event_source_set_enabled(sd_event_source *s, int m) { int r; - assert_return(s, -EINVAL); assert_return(IN_SET(m, SD_EVENT_OFF, SD_EVENT_ON, SD_EVENT_ONESHOT), -EINVAL); + + /* Quick mode: if the source doesn't exist, SD_EVENT_OFF is a noop. */ + if (m == SD_EVENT_OFF && !s) + return 0; + + assert_return(s, -EINVAL); assert_return(!event_pid_changed(s->event), -ECHILD); /* If we are dead anyway, we are fine with turning off sources, but everything else needs to fail. */