USB: Put the default pipe's USB ID and cancel its transfers earlier during teardown.
This way, any endpoints or interfaces which are currently using the default pipe for SetFeature/.../etc. will return immediately and become unbusy. Should fix the remaining KDLs in #16794 and #16969. Change-Id: I6615fc03394a0c50eae1ca7da2fb43f243841613 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4490 Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
2ce316ccc8
commit
faae5dd726
@@ -326,6 +326,13 @@ Device::Device(Object* parent, int8 hubAddress, uint8 hubPort,
|
|||||||
|
|
||||||
Device::~Device()
|
Device::~Device()
|
||||||
{
|
{
|
||||||
|
// Cancel transfers on the default pipe and put its USBID to prevent
|
||||||
|
// further transfers from being queued.
|
||||||
|
if (fDefaultPipe != NULL) {
|
||||||
|
fDefaultPipe->PutUSBID();
|
||||||
|
fDefaultPipe->CancelQueuedTransfers(true);
|
||||||
|
}
|
||||||
|
|
||||||
// Destroy open endpoints. Do not send a device request to unconfigure
|
// Destroy open endpoints. Do not send a device request to unconfigure
|
||||||
// though, since we may be deleted because the device was unplugged already.
|
// though, since we may be deleted because the device was unplugged already.
|
||||||
Unconfigure(false);
|
Unconfigure(false);
|
||||||
@@ -355,8 +362,6 @@ Device::~Device()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remove ourselves from the stack before deleting public structures.
|
// Remove ourselves from the stack before deleting public structures.
|
||||||
if (fDefaultPipe != NULL)
|
|
||||||
fDefaultPipe->PutUSBID();
|
|
||||||
PutUSBID();
|
PutUSBID();
|
||||||
delete fDefaultPipe;
|
delete fDefaultPipe;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user