- Don't complete irps with lock held
svn path=/branches/usb-bringup-trunk/; revision=55091
IUSBRequest * Request;
BOOLEAN ShouldReleaseWhenDone;
USBD_STATUS UrbStatus;
IUSBRequest * Request;
BOOLEAN ShouldReleaseWhenDone;
USBD_STATUS UrbStatus;
//
if (Request->GetQueueHead(&NewQueueHead) == STATUS_SUCCESS)
{
//
if (Request->GetQueueHead(&NewQueueHead) == STATUS_SUCCESS)
{
+ //
+ // first acquire request lock
+ //
+ KeAcquireSpinLock(&m_Lock, &OldLevel);
+
//
// add to pending list
//
InsertTailList(&m_PendingRequestAsyncList, &NewQueueHead->LinkedQueueHeads);
//
// add to pending list
//
InsertTailList(&m_PendingRequestAsyncList, &NewQueueHead->LinkedQueueHeads);
+ //
+ // release queue head
+ //
+ KeReleaseSpinLock(&m_Lock, OldLevel);
+
//
Request = (IUSBRequest*) CurrentQH->Request;
//
Request = (IUSBRequest*) CurrentQH->Request;
+ //
+ // release lock
+ //
+ KeReleaseSpinLock(&m_Lock, OldLevel);
+
//
// complete request now
//
QueueHeadCleanup(CurrentQH);
//
// complete request now
//
QueueHeadCleanup(CurrentQH);
+
+ //
+ // first acquire request lock
+ //
+ KeAcquireSpinLock(&m_Lock, &OldLevel);