diff options
-rw-r--r-- | src/libsystemd-terminal/evcat.c | 3 | ||||
-rw-r--r-- | src/libsystemd-terminal/modeset.c | 3 | ||||
-rw-r--r-- | src/libsystemd-terminal/sysview.c | 22 |
3 files changed, 12 insertions, 16 deletions
diff --git a/src/libsystemd-terminal/evcat.c b/src/libsystemd-terminal/evcat.c index b3f08e60bf..62556f6a2b 100644 --- a/src/libsystemd-terminal/evcat.c +++ b/src/libsystemd-terminal/evcat.c @@ -330,7 +330,8 @@ static int evcat_sysview_fn(sysview_context *c, void *userdata, sysview_event *e case SYSVIEW_EVENT_SESSION_REMOVE: idev_session_disable(e->idev_session); e->idev_session = idev_session_free(e->idev_session); - sd_event_exit(e->event, 0); + if (sd_event_get_exit_code(e->event, &r) == -ENODATA) + sd_event_exit(e->event, 0); break; case SYSVIEW_EVENT_SESSION_ATTACH: d = ev->session_attach.device; diff --git a/src/libsystemd-terminal/modeset.c b/src/libsystemd-terminal/modeset.c index 7a28e7ab97..f564fa0f65 100644 --- a/src/libsystemd-terminal/modeset.c +++ b/src/libsystemd-terminal/modeset.c @@ -332,7 +332,8 @@ static int modeset_sysview_fn(sysview_context *c, void *userdata, sysview_event grdev_session_restore(m->grdev_session); grdev_session_disable(m->grdev_session); m->grdev_session = grdev_session_free(m->grdev_session); - sd_event_exit(m->event, 0); + if (sd_event_get_exit_code(m->event, &r) == -ENODATA) + sd_event_exit(m->event, 0); break; case SYSVIEW_EVENT_SESSION_ATTACH: d = ev->session_attach.device; diff --git a/src/libsystemd-terminal/sysview.c b/src/libsystemd-terminal/sysview.c index 969514ad9d..cd776f62d8 100644 --- a/src/libsystemd-terminal/sysview.c +++ b/src/libsystemd-terminal/sysview.c @@ -1437,20 +1437,6 @@ void sysview_context_stop(sysview_context *c) { log_debug("sysview: stop"); - c->running = false; - c->scanned = false; - c->event_fn = NULL; - c->userdata = NULL; - c->scan_src = sd_event_source_unref(c->scan_src); - context_ud_stop(c); - context_ld_stop(c); - - /* - * Event-callbacks are already cleared, hence we can safely ignore - * return codes of the context_remove_*() helpers. They cannot be - * originated from user-callbacks, so we already handled them. - */ - while ((device = hashmap_first(c->device_map))) context_remove_device(c, device); @@ -1459,6 +1445,14 @@ void sysview_context_stop(sysview_context *c) { while ((seat = hashmap_first(c->seat_map))) context_remove_seat(c, seat); + + c->running = false; + c->scanned = false; + c->event_fn = NULL; + c->userdata = NULL; + c->scan_src = sd_event_source_unref(c->scan_src); + context_ud_stop(c); + context_ld_stop(c); } static int context_scan_fn(sd_event_source *s, void *userdata) { |