mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 02:58:02 -06:00
Windows driver: remove unneeded __try/__finally
This commit is contained in:
@@ -332,37 +332,31 @@ static VOID CompleteIrpWorkItemRoutine(PDEVICE_OBJECT DeviceObject, PVOID Contex
|
|||||||
KIRQL oldIrql;
|
KIRQL oldIrql;
|
||||||
UNREFERENCED_PARAMETER(DeviceObject);
|
UNREFERENCED_PARAMETER(DeviceObject);
|
||||||
|
|
||||||
__try
|
// Complete IRP
|
||||||
|
TCCompleteDiskIrp(workItem->Irp, workItem->Status, workItem->Information);
|
||||||
|
|
||||||
|
// Centralized accounting and cleanup
|
||||||
|
item->Status = workItem->Status;
|
||||||
|
item->BytesCompleted = workItem->Information;
|
||||||
|
OnItemCompleted(item, TRUE); // releases RemoveLock last
|
||||||
|
|
||||||
|
// Return or free the work item depending on origin
|
||||||
|
if (workItem->FromPool)
|
||||||
{
|
{
|
||||||
// Complete IRP
|
KeAcquireSpinLock(&queue->WorkItemLock, &oldIrql);
|
||||||
TCCompleteDiskIrp(workItem->Irp, workItem->Status, workItem->Information);
|
InsertTailList(&queue->FreeWorkItemsList, &workItem->ListEntry);
|
||||||
|
KeReleaseSpinLock(&queue->WorkItemLock, oldIrql);
|
||||||
// Centralized accounting and cleanup
|
// immediately wake any waiter
|
||||||
item->Status = workItem->Status;
|
KeSetEvent(&queue->WorkItemAvailableEvent, IO_DISK_INCREMENT, FALSE);
|
||||||
item->BytesCompleted = workItem->Information;
|
|
||||||
OnItemCompleted(item, TRUE); // releases RemoveLock last
|
|
||||||
|
|
||||||
// Return or free the work item depending on origin
|
|
||||||
if (workItem->FromPool)
|
|
||||||
{
|
|
||||||
KeAcquireSpinLock(&queue->WorkItemLock, &oldIrql);
|
|
||||||
InsertTailList(&queue->FreeWorkItemsList, &workItem->ListEntry);
|
|
||||||
KeReleaseSpinLock(&queue->WorkItemLock, oldIrql);
|
|
||||||
// immediately wake any waiter
|
|
||||||
KeSetEvent(&queue->WorkItemAvailableEvent, IO_DISK_INCREMENT, FALSE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
IoFreeWorkItem(workItem->WorkItem);
|
|
||||||
TCfree(workItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (InterlockedDecrement(&queue->ActiveWorkItems) == 0)
|
|
||||||
KeSetEvent(&queue->NoActiveWorkItemsEvent, IO_DISK_INCREMENT, FALSE);
|
|
||||||
}
|
}
|
||||||
__finally
|
else
|
||||||
{
|
{
|
||||||
|
IoFreeWorkItem(workItem->WorkItem);
|
||||||
|
TCfree(workItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (InterlockedDecrement(&queue->ActiveWorkItems) == 0)
|
||||||
|
KeSetEvent(&queue->NoActiveWorkItemsEvent, IO_DISK_INCREMENT, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper: acquire a completion work item (from pool if available, else elastic allocation)
|
// Helper: acquire a completion work item (from pool if available, else elastic allocation)
|
||||||
|
|||||||
Reference in New Issue
Block a user