diff --git a/src/launcher-util.c b/src/launcher-util.c index 4f77d115..8b496c85 100644 --- a/src/launcher-util.c +++ b/src/launcher-util.c @@ -173,6 +173,12 @@ weston_launcher_open(struct weston_launcher *launcher, return data->fd; } +void +weston_launcher_close(struct weston_launcher *launcher, int fd) +{ + close(fd); +} + void weston_launcher_restore(struct weston_launcher *launcher) { diff --git a/src/launcher-util.h b/src/launcher-util.h index 3e7ceb59..9de52370 100644 --- a/src/launcher-util.h +++ b/src/launcher-util.h @@ -39,6 +39,9 @@ int weston_launcher_open(struct weston_launcher *launcher, const char *path, int flags); +void +weston_launcher_close(struct weston_launcher *launcher, int fd); + int weston_launcher_activate_vt(struct weston_launcher *launcher, int vt); diff --git a/src/udev-seat.c b/src/udev-seat.c index ffaf08aa..deceb50c 100644 --- a/src/udev-seat.c +++ b/src/udev-seat.c @@ -83,11 +83,11 @@ device_added(struct udev_device *udev_device, struct udev_input *input) device = evdev_device_create(&seat->base, devnode, fd); if (device == EVDEV_UNHANDLED_DEVICE) { - close(fd); + weston_launcher_close(c->launcher, fd); weston_log("not using input device '%s'.\n", devnode); return 0; } else if (device == NULL) { - close(fd); + weston_launcher_close(c->launcher, fd); weston_log("failed to create input device '%s'.\n", devnode); return 0; } @@ -219,9 +219,11 @@ evdev_udev_handler(int fd, uint32_t mask, void *data) if (!strcmp(device->devnode, devnode)) { weston_log("input device %s, %s removed\n", device->devname, device->devnode); + weston_launcher_close(input->compositor->launcher, + device->fd); evdev_device_destroy(device); - break; - } + break; + } } } @@ -278,8 +280,11 @@ udev_input_remove_devices(struct udev_input *input) struct udev_seat *seat; wl_list_for_each(seat, &input->compositor->seat_list, base.link) { - wl_list_for_each_safe(device, next, &seat->devices_list, link) + wl_list_for_each_safe(device, next, &seat->devices_list, link) { + weston_launcher_close(input->compositor->launcher, + device->fd); evdev_device_destroy(device); + } if (seat->base.keyboard) notify_keyboard_focus_out(&seat->base);