summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libsystemd-terminal/evcat.c3
-rw-r--r--src/libsystemd-terminal/modeset.c3
-rw-r--r--src/libsystemd-terminal/sysview.c22
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) {