summaryrefslogtreecommitdiff
path: root/src/libelogind
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-05-25 17:08:40 +0200
committerSven Eden <yamakuzure@gmx.net>2018-08-24 16:47:08 +0200
commit373943c03b88207f5e0b027ad796b4281b045698 (patch)
treeb9f92e1521f14a44efe8c7a5b2c51b3e7d2884f1 /src/libelogind
parent6501a626485ae069da1250e0a712635185fa381e (diff)
sd-event: propagate errors from source_set_pending() in all cases
Diffstat (limited to 'src/libelogind')
-rw-r--r--src/libelogind/sd-event/sd-event.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/libelogind/sd-event/sd-event.c b/src/libelogind/sd-event/sd-event.c
index 3dc0cdb95..3ebd9e75d 100644
--- a/src/libelogind/sd-event/sd-event.c
+++ b/src/libelogind/sd-event/sd-event.c
@@ -1531,6 +1531,10 @@ _public_ int sd_event_source_set_io_events(sd_event_source *s, uint32_t events)
if (s->io.events == events && !(events & EPOLLET))
return 0;
+ r = source_set_pending(s, false);
+ if (r < 0)
+ return r;
+
if (s->enabled != SD_EVENT_OFF) {
r = source_io_register(s, s->enabled, events);
if (r < 0)
@@ -1538,7 +1542,6 @@ _public_ int sd_event_source_set_io_events(sd_event_source *s, uint32_t events)
}
s->io.events = events;
- source_set_pending(s, false);
return 0;
}
@@ -1800,15 +1803,18 @@ _public_ int sd_event_source_get_time(sd_event_source *s, uint64_t *usec) {
_public_ int sd_event_source_set_time(sd_event_source *s, uint64_t usec) {
struct clock_data *d;
+ int r;
assert_return(s, -EINVAL);
assert_return(EVENT_SOURCE_IS_TIME(s->type), -EDOM);
assert_return(s->event->state != SD_EVENT_FINISHED, -ESTALE);
assert_return(!event_pid_changed(s->event), -ECHILD);
- s->time.next = usec;
+ r = source_set_pending(s, false);
+ if (r < 0)
+ return r;
- source_set_pending(s, false);
+ s->time.next = usec;
d = event_get_clock_data(s->event, s->type);
assert(d);
@@ -1832,6 +1838,7 @@ _public_ int sd_event_source_get_time_accuracy(sd_event_source *s, uint64_t *use
_public_ int sd_event_source_set_time_accuracy(sd_event_source *s, uint64_t usec) {
struct clock_data *d;
+ int r;
assert_return(s, -EINVAL);
assert_return(usec != (uint64_t) -1, -EINVAL);
@@ -1839,13 +1846,15 @@ _public_ int sd_event_source_set_time_accuracy(sd_event_source *s, uint64_t usec
assert_return(s->event->state != SD_EVENT_FINISHED, -ESTALE);
assert_return(!event_pid_changed(s->event), -ECHILD);
+ r = source_set_pending(s, false);
+ if (r < 0)
+ return r;
+
if (usec == 0)
usec = DEFAULT_ACCURACY_USEC;
s->time.accuracy = usec;
- source_set_pending(s, false);
-
d = event_get_clock_data(s->event, s->type);
assert(d);