diff --git a/backend/session/session.c b/backend/session/session.c index 9c77bef5b..b0b2894b4 100644 --- a/backend/session/session.c +++ b/backend/session/session.c @@ -206,25 +206,25 @@ static int handle_udev_event(int fd, uint32_t mask, void *data) { .path = devnode, }; wl_signal_emit_mutable(&session->events.add_drm_card, &event); - } else if (strcmp(action, "change") == 0 || strcmp(action, "remove") == 0) { + } else if (strcmp(action, "change") == 0) { struct wlr_device *dev; wl_list_for_each(dev, &session->devices, link) { - if (dev->dev != devnum) { - continue; - } - - if (strcmp(action, "change") == 0) { + if (dev->dev == devnum) { wlr_log(WLR_DEBUG, "DRM device %s changed", sysname); struct wlr_device_change_event event = {0}; read_udev_change_event(&event, udev_dev); wl_signal_emit_mutable(&dev->events.change, &event); - } else if (strcmp(action, "remove") == 0) { + break; + } + } + } else if (strcmp(action, "remove") == 0) { + struct wlr_device *dev; + wl_list_for_each(dev, &session->devices, link) { + if (dev->dev == devnum) { wlr_log(WLR_DEBUG, "DRM device %s removed", sysname); wl_signal_emit_mutable(&dev->events.remove, NULL); - } else { - assert(0); + break; } - break; } }