summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/sd_event_source_set_enabled.xml19
-rw-r--r--src/libsystemd/sd-event/event-util.c7
-rw-r--r--src/libsystemd/sd-event/event-util.h4
-rw-r--r--src/libsystemd/sd-event/sd-event.c7
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. */