diff options
-rw-r--r-- | man/sd_event_source_set_enabled.xml | 19 | ||||
-rw-r--r-- | src/libsystemd/sd-event/event-util.c | 7 | ||||
-rw-r--r-- | src/libsystemd/sd-event/event-util.h | 4 | ||||
-rw-r--r-- | src/libsystemd/sd-event/sd-event.c | 7 |
4 files changed, 18 insertions, 19 deletions
diff --git a/man/sd_event_source_set_enabled.xml b/man/sd_event_source_set_enabled.xml index d6cdf85eda..5f13fc101d 100644 --- a/man/sd_event_source_set_enabled.xml +++ b/man/sd_event_source_set_enabled.xml @@ -53,16 +53,15 @@ <refsect1> <title>Description</title> - <para><function>sd_event_source_set_enabled()</function> may be - used to enable or disable the event source object specified as - <parameter>source</parameter>. The <parameter>enabled</parameter> - parameter takes one of <constant>SD_EVENT_ON</constant> (to - enable), <constant>SD_EVENT_OFF</constant> (to disable) or - <constant>SD_EVENT_ONESHOT</constant>. If invoked with - <constant>SD_EVENT_ONESHOT</constant> the event source will be - enabled but automatically reset to - <constant>SD_EVENT_OFF</constant> after the event source was - dispatched once.</para> + <para><function>sd_event_source_set_enabled()</function> may be used to enable or disable the event + source object specified as <parameter>source</parameter>. The <parameter>enabled</parameter> parameter + takes one of <constant>SD_EVENT_ON</constant> (to enable), <constant>SD_EVENT_OFF</constant> (to disable) + or <constant>SD_EVENT_ONESHOT</constant>. If invoked with <constant>SD_EVENT_ONESHOT</constant> the event + source will be enabled but automatically reset to <constant>SD_EVENT_OFF</constant> after one dispatch. + For <constant>SD_EVENT_OFF</constant>, the event source <parameter>source</parameter> may be + <constant>NULL</constant>, in which case the function does nothing. Otherwise, + <parameter>source</parameter> must be a valid pointer to an <structname>sd_event_source</structname> + object.</para> <para>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 3a7afe9ae3..a36eba9029 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 7bab42ed8f..c185584412 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 94431d0725..cea1c009d6 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. */ |