Input: atkbd - cancel delayed work before freeing its structure
Pointed out by Oleg Nesterov. Since delayed work is used here, use of flush_scheduled_work() is not sufficient in atkbd_disconnect(). It does not wait for scheduled delayed work to finish. This patch prevents delayed work to be processed after freeing atkbd structure (used struct delayed_work is part of atkbd) by cancelling this delayed work. Signed-off-by: Jiri Pirko <jpirko@redhat.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
committed by
Dmitry Torokhov
parent
a8215b81cc
commit
d6d79a785d
@@ -824,7 +824,7 @@ static void atkbd_disconnect(struct serio *serio)
|
|||||||
atkbd_disable(atkbd);
|
atkbd_disable(atkbd);
|
||||||
|
|
||||||
/* make sure we don't have a command in flight */
|
/* make sure we don't have a command in flight */
|
||||||
flush_scheduled_work();
|
cancel_delayed_work_sync(&atkbd->event_work);
|
||||||
|
|
||||||
sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
|
sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
|
||||||
input_unregister_device(atkbd->dev);
|
input_unregister_device(atkbd->dev);
|
||||||
|
Reference in New Issue
Block a user