If we go through connected->configured->disconnected cycle very quickly,
it is possible that we may not generate a disconnect uevent to userspace.
Connected+configured could have happened before the work item got
executed, and thus would not have updated the sw_connected state. On
the disconnect, it would have noticed that a config is no longer there
but since sw_connected was still 0, it would not have sent the
disconnect event.
Change-Id: Id71175f784e3e1cf3f828bd8b24fceea1078a06b
Signed-off-by: Dima Zavin <dima@android.com>
unsigned long flags;
spin_lock_irqsave(&cdev->lock, flags);
- if (cdev->config) {
+ if (cdev->config)
uevent_envp = configured;
- } else if (dev->connected != dev->sw_connected) {
- dev->sw_connected = dev->connected;
- uevent_envp = dev->sw_connected ? connected : disconnected;
- }
+ else if (dev->connected != dev->sw_connected)
+ uevent_envp = dev->connected ? connected : disconnected;
+ dev->sw_connected = dev->connected;
spin_unlock_irqrestore(&cdev->lock, flags);
if (uevent_envp) {