chiark / gitweb /
terminal: signal object removal during sysview_context_stop()
[elogind.git] / src / libsystemd-terminal / modeset.c
index 33c79a2036914a830b54c3a7c0f7e11bd618a378..f564fa0f6513d34a475c43bd0a5f35f43621f467 100644 (file)
@@ -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;
@@ -347,6 +348,13 @@ static int modeset_sysview_fn(sysview_context *c, void *userdata, sysview_event
                 if (type == SYSVIEW_DEVICE_DRM)
                         grdev_session_remove_drm(m->grdev_session, sysview_device_get_ud(d));
 
+                break;
+        case SYSVIEW_EVENT_SESSION_REFRESH:
+                d = ev->session_refresh.device;
+                type = sysview_device_get_type(d);
+                if (type == SYSVIEW_DEVICE_DRM)
+                        grdev_session_hotplug_drm(m->grdev_session, ev->session_refresh.ud);
+
                 break;
         case SYSVIEW_EVENT_SESSION_CONTROL:
                 r = ev->session_control.error;
@@ -361,13 +369,6 @@ static int modeset_sysview_fn(sysview_context *c, void *userdata, sysview_event
                         return -errno;
                 }
 
-                break;
-        case SYSVIEW_EVENT_DEVICE_CHANGE:
-                d = ev->device_change.device;
-                type = sysview_device_get_type(d);
-                if (type == SYSVIEW_DEVICE_DRM)
-                        grdev_session_hotplug_drm(m->grdev_session, ev->device_change.ud);
-
                 break;
         }