mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 01:42:30 +00:00
[KBDCLASS/MOUCLASS]
- Better fix for the race condition svn path=/trunk/; revision=54042
This commit is contained in:
parent
8b969e61ec
commit
89107a6e11
|
@ -761,6 +761,7 @@ HandleReadIrp(
|
|||
{
|
||||
PCLASS_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||
NTSTATUS Status;
|
||||
KIRQL OldIrql;
|
||||
|
||||
TRACE_(CLASS_NAME, "HandleReadIrp(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
|
||||
|
||||
|
@ -804,18 +805,20 @@ HandleReadIrp(
|
|||
}
|
||||
else
|
||||
{
|
||||
IoMarkIrpPending(Irp);
|
||||
DeviceExtension->PendingIrp = Irp;
|
||||
(VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine);
|
||||
if (Irp->Cancel && IoSetCancelRoutine(Irp, NULL))
|
||||
IoAcquireCancelSpinLock(&OldIrql);
|
||||
if (Irp->Cancel)
|
||||
{
|
||||
DeviceExtension->PendingIrp = NULL;
|
||||
Status = STATUS_CANCELLED;
|
||||
}
|
||||
else
|
||||
{
|
||||
IoMarkIrpPending(Irp);
|
||||
DeviceExtension->PendingIrp = Irp;
|
||||
(VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine);
|
||||
Status = STATUS_PENDING;
|
||||
}
|
||||
IoReleaseCancelSpinLock(OldIrql);
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
|
|
@ -738,6 +738,7 @@ HandleReadIrp(
|
|||
{
|
||||
PCLASS_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||
NTSTATUS Status;
|
||||
KIRQL OldIrql;
|
||||
|
||||
TRACE_(CLASS_NAME, "HandleReadIrp(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
|
||||
|
||||
|
@ -781,18 +782,20 @@ HandleReadIrp(
|
|||
}
|
||||
else
|
||||
{
|
||||
IoMarkIrpPending(Irp);
|
||||
DeviceExtension->PendingIrp = Irp;
|
||||
(VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine);
|
||||
if (Irp->Cancel && IoSetCancelRoutine(Irp, NULL))
|
||||
IoAcquireCancelSpinLock(&OldIrql);
|
||||
if (Irp->Cancel)
|
||||
{
|
||||
DeviceExtension->PendingIrp = NULL;
|
||||
Status = STATUS_CANCELLED;
|
||||
}
|
||||
else
|
||||
{
|
||||
IoMarkIrpPending(Irp);
|
||||
DeviceExtension->PendingIrp = Irp;
|
||||
(VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine);
|
||||
Status = STATUS_PENDING;
|
||||
}
|
||||
IoReleaseCancelSpinLock(OldIrql);
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue