am 244eb34a: am d98f8aff: Merge "Fix dangling pointer when device closed just after opening." into honeycomb-mr1

* commit '244eb34a6712688fa87653dd3e2e2d05cd568eec':
  Fix dangling pointer when device closed just after opening.
This commit is contained in:
Jeff Brown
2011-03-17 01:02:28 -07:00
committed by Android Git Automerger

View File

@ -1074,8 +1074,34 @@ int EventHub::closeDeviceAtIndexLocked(int index) {
mDevices.removeAt(index);
device->close();
// Unlink for opening devices list if it is present.
Device* pred = NULL;
bool found = false;
for (Device* entry = mOpeningDevices; entry != NULL; ) {
if (entry == device) {
found = true;
break;
}
pred = entry;
entry = entry->next;
}
if (found) {
// Unlink the device from the opening devices list then delete it.
// We don't need to tell the client that the device was closed because
// it does not even know it was opened in the first place.
LOGI("Device %s was immediately closed after opening.", device->path.string());
if (pred) {
pred->next = device->next;
} else {
mOpeningDevices = device->next;
}
delete device;
} else {
// Link into closing devices list.
// The device will be deleted later after we have informed the client.
device->next = mClosingDevices;
mClosingDevices = device;
}
return 0;
}