mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 14:37:45 +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;
|
PCLASS_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
KIRQL OldIrql;
|
||||||
|
|
||||||
TRACE_(CLASS_NAME, "HandleReadIrp(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
|
TRACE_(CLASS_NAME, "HandleReadIrp(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
|
||||||
|
|
||||||
|
@ -804,18 +805,20 @@ HandleReadIrp(
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IoMarkIrpPending(Irp);
|
IoAcquireCancelSpinLock(&OldIrql);
|
||||||
DeviceExtension->PendingIrp = Irp;
|
if (Irp->Cancel)
|
||||||
(VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine);
|
|
||||||
if (Irp->Cancel && IoSetCancelRoutine(Irp, NULL))
|
|
||||||
{
|
{
|
||||||
DeviceExtension->PendingIrp = NULL;
|
DeviceExtension->PendingIrp = NULL;
|
||||||
Status = STATUS_CANCELLED;
|
Status = STATUS_CANCELLED;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
IoMarkIrpPending(Irp);
|
||||||
|
DeviceExtension->PendingIrp = Irp;
|
||||||
|
(VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine);
|
||||||
Status = STATUS_PENDING;
|
Status = STATUS_PENDING;
|
||||||
}
|
}
|
||||||
|
IoReleaseCancelSpinLock(OldIrql);
|
||||||
}
|
}
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -738,6 +738,7 @@ HandleReadIrp(
|
||||||
{
|
{
|
||||||
PCLASS_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
PCLASS_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
KIRQL OldIrql;
|
||||||
|
|
||||||
TRACE_(CLASS_NAME, "HandleReadIrp(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
|
TRACE_(CLASS_NAME, "HandleReadIrp(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
|
||||||
|
|
||||||
|
@ -781,18 +782,20 @@ HandleReadIrp(
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IoMarkIrpPending(Irp);
|
IoAcquireCancelSpinLock(&OldIrql);
|
||||||
DeviceExtension->PendingIrp = Irp;
|
if (Irp->Cancel)
|
||||||
(VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine);
|
|
||||||
if (Irp->Cancel && IoSetCancelRoutine(Irp, NULL))
|
|
||||||
{
|
{
|
||||||
DeviceExtension->PendingIrp = NULL;
|
DeviceExtension->PendingIrp = NULL;
|
||||||
Status = STATUS_CANCELLED;
|
Status = STATUS_CANCELLED;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
IoMarkIrpPending(Irp);
|
||||||
|
DeviceExtension->PendingIrp = Irp;
|
||||||
|
(VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine);
|
||||||
Status = STATUS_PENDING;
|
Status = STATUS_PENDING;
|
||||||
}
|
}
|
||||||
|
IoReleaseCancelSpinLock(OldIrql);
|
||||||
}
|
}
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue