Index: sys/dev/evdev/evdev.c =================================================================== diff -u -N -r09c7c41d8745c3c2ff590ff36bafaf7a419ddcbd -r81187b8c7bfbbea927d729fb7bf57a610c1ca396 --- sys/dev/evdev/evdev.c (.../evdev.c) (revision 09c7c41d8745c3c2ff590ff36bafaf7a419ddcbd) +++ sys/dev/evdev/evdev.c (.../evdev.c) (revision 81187b8c7bfbbea927d729fb7bf57a610c1ca396) @@ -354,7 +354,7 @@ int evdev_unregister(struct evdev_dev *evdev) { - struct evdev_client *client; + struct evdev_client *client, *tmp; int ret; debugf(evdev, "%s: unregistered evdev provider: %s\n", evdev->ev_shortname, evdev->ev_name); @@ -364,7 +364,7 @@ EVDEV_LOCK(evdev); evdev->ev_cdev->si_drv1 = NULL; /* Wake up sleepers */ - LIST_FOREACH(client, &evdev->ev_clients, ec_link) { + LIST_FOREACH_SAFE(client, &evdev->ev_clients, ec_link, tmp) { evdev_revoke_client(client); evdev_dispose_client(evdev, client); EVDEV_CLIENT_LOCKQ(client);