sd-event: use _cleanup_ to manage temporary references

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2018-04-07 19:14:37 +02:00
parent 1e9f0ccadf
commit 30dd293c88
1 changed files with 8 additions and 16 deletions

View File

@ -2403,6 +2403,7 @@ static int event_prepare(sd_event *e) {
static int dispatch_exit(sd_event *e) {
sd_event_source *p;
_cleanup_(sd_event_unrefp) sd_event *ref = NULL;
int r;
assert(e);
@ -2413,15 +2414,11 @@ static int dispatch_exit(sd_event *e) {
return 0;
}
sd_event_ref(e);
ref = sd_event_ref(e);
e->iteration++;
e->state = SD_EVENT_EXITING;
r = source_dispatch(p);
e->state = SD_EVENT_INITIAL;
sd_event_unref(e);
return r;
}
@ -2661,14 +2658,12 @@ _public_ int sd_event_dispatch(sd_event *e) {
p = event_next_pending(e);
if (p) {
sd_event_ref(e);
_cleanup_(sd_event_unrefp) sd_event *ref = NULL;
ref = sd_event_ref(e);
e->state = SD_EVENT_RUNNING;
r = source_dispatch(p);
e->state = SD_EVENT_INITIAL;
sd_event_unref(e);
return r;
}
@ -2735,6 +2730,7 @@ _public_ int sd_event_run(sd_event *e, uint64_t timeout) {
}
_public_ int sd_event_loop(sd_event *e) {
_cleanup_(sd_event_unrefp) sd_event *ref = NULL;
int r;
assert_return(e, -EINVAL);
@ -2742,19 +2738,15 @@ _public_ int sd_event_loop(sd_event *e) {
assert_return(!event_pid_changed(e), -ECHILD);
assert_return(e->state == SD_EVENT_INITIAL, -EBUSY);
sd_event_ref(e);
ref = sd_event_ref(e);
while (e->state != SD_EVENT_FINISHED) {
r = sd_event_run(e, (uint64_t) -1);
if (r < 0)
goto finish;
return r;
}
r = e->exit_code;
finish:
sd_event_unref(e);
return r;
return e->exit_code;
}
_public_ int sd_event_get_fd(sd_event *e) {