[USBEHCI]

- Don't complete irps with lock held

svn path=/branches/usb-bringup-trunk/; revision=55091
This commit is contained in:
Johannes Anderwald 2012-01-23 04:22:11 +00:00
parent b434c46463
commit 1cdf0e1d0d

View file

@ -695,6 +695,7 @@ CUSBQueue::QueueHeadCleanup(
IUSBRequest * Request;
BOOLEAN ShouldReleaseWhenDone;
USBD_STATUS UrbStatus;
KIRQL OldLevel;
//
// sanity checks
@ -763,11 +764,21 @@ CUSBQueue::QueueHeadCleanup(
//
if (Request->GetQueueHead(&NewQueueHead) == STATUS_SUCCESS)
{
//
// first acquire request lock
//
KeAcquireSpinLock(&m_Lock, &OldLevel);
//
// add to pending list
//
InsertTailList(&m_PendingRequestAsyncList, &NewQueueHead->LinkedQueueHeads);
//
// release queue head
//
KeReleaseSpinLock(&m_Lock, OldLevel);
//
// Done for now
//
@ -859,10 +870,20 @@ CUSBQueue::CompleteAsyncRequests()
//
Request = (IUSBRequest*) CurrentQH->Request;
//
// release lock
//
KeReleaseSpinLock(&m_Lock, OldLevel);
//
// complete request now
//
QueueHeadCleanup(CurrentQH);
//
// first acquire request lock
//
KeAcquireSpinLock(&m_Lock, &OldLevel);
}
//