From 5eed5d622d5afd885e70f269ce8a7e494a4f7cd2 Mon Sep 17 00:00:00 2001 From: sunzhguy Date: Fri, 3 Jan 2025 16:58:36 +0800 Subject: [PATCH] session: skip adding duplicate DRM device Signed-off-by: sunzhguy --- backend/session/session.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/backend/session/session.c b/backend/session/session.c index 6254a734a..9c77bef5b 100644 --- a/backend/session/session.c +++ b/backend/session/session.c @@ -191,14 +191,22 @@ static int handle_udev_event(int fd, uint32_t mask, void *data) { goto out; } + dev_t devnum = udev_device_get_devnum(udev_dev); if (strcmp(action, "add") == 0) { + struct wlr_device *dev; + wl_list_for_each(dev, &session->devices, link) { + if (dev->dev == devnum) { + wlr_log(WLR_DEBUG, "Skipping duplicate device %s", sysname); + goto out; + } + } + wlr_log(WLR_DEBUG, "DRM device %s added", sysname); struct wlr_session_add_event event = { .path = devnode, }; wl_signal_emit_mutable(&session->events.add_drm_card, &event); } else if (strcmp(action, "change") == 0 || strcmp(action, "remove") == 0) { - dev_t devnum = udev_device_get_devnum(udev_dev); struct wlr_device *dev; wl_list_for_each(dev, &session->devices, link) { if (dev->dev != devnum) {