mirror of
https://github.com/reactos/reactos.git
synced 2024-07-12 23:55:07 +00:00
[NPFS]
- Fix several cancellation races and broken checks svn path=/trunk/; revision=54327
This commit is contained in:
parent
784e19a384
commit
3eff89fe04
|
@ -133,9 +133,11 @@ NpfsFindListeningServerInstance(PNPFS_FCB Fcb)
|
||||||
IoAcquireCancelSpinLock(&oldIrql);
|
IoAcquireCancelSpinLock(&oldIrql);
|
||||||
if (!Irp->Cancel)
|
if (!Irp->Cancel)
|
||||||
{
|
{
|
||||||
(void)IoSetCancelRoutine(Irp, NULL);
|
if (IoSetCancelRoutine(Irp, NULL) != NULL)
|
||||||
IoReleaseCancelSpinLock(oldIrql);
|
{
|
||||||
return Waiter->Ccb;
|
IoReleaseCancelSpinLock(oldIrql);
|
||||||
|
return Waiter->Ccb;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
IoReleaseCancelSpinLock(oldIrql);
|
IoReleaseCancelSpinLock(oldIrql);
|
||||||
}
|
}
|
||||||
|
@ -868,11 +870,7 @@ NpfsCleanup(PDEVICE_OBJECT DeviceObject,
|
||||||
RemoveEntryList(Entry);
|
RemoveEntryList(Entry);
|
||||||
tmpIrp = CONTAINING_RECORD(WaitEntry, IRP, Tail.Overlay.DriverContext);
|
tmpIrp = CONTAINING_RECORD(WaitEntry, IRP, Tail.Overlay.DriverContext);
|
||||||
IoAcquireCancelSpinLock(&oldIrql);
|
IoAcquireCancelSpinLock(&oldIrql);
|
||||||
if (!tmpIrp->Cancel)
|
Complete = (NULL != IoSetCancelRoutine(tmpIrp, NULL));
|
||||||
{
|
|
||||||
(void)IoSetCancelRoutine(tmpIrp, NULL);
|
|
||||||
Complete = TRUE;
|
|
||||||
}
|
|
||||||
IoReleaseCancelSpinLock(oldIrql);
|
IoReleaseCancelSpinLock(oldIrql);
|
||||||
if (Complete)
|
if (Complete)
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,12 +57,11 @@ NpfsAddListeningServerInstance(PIRP Irp,
|
||||||
|
|
||||||
KeLockMutex(&Ccb->Fcb->CcbListLock);
|
KeLockMutex(&Ccb->Fcb->CcbListLock);
|
||||||
|
|
||||||
IoMarkIrpPending(Irp);
|
|
||||||
InsertTailList(&Ccb->Fcb->WaiterListHead, &Entry->Entry);
|
|
||||||
|
|
||||||
IoAcquireCancelSpinLock(&oldIrql);
|
IoAcquireCancelSpinLock(&oldIrql);
|
||||||
if (!Irp->Cancel)
|
if (!Irp->Cancel)
|
||||||
{
|
{
|
||||||
|
IoMarkIrpPending(Irp);
|
||||||
|
InsertTailList(&Ccb->Fcb->WaiterListHead, &Entry->Entry);
|
||||||
(void)IoSetCancelRoutine(Irp, NpfsListeningCancelRoutine);
|
(void)IoSetCancelRoutine(Irp, NpfsListeningCancelRoutine);
|
||||||
IoReleaseCancelSpinLock(oldIrql);
|
IoReleaseCancelSpinLock(oldIrql);
|
||||||
KeUnlockMutex(&Ccb->Fcb->CcbListLock);
|
KeUnlockMutex(&Ccb->Fcb->CcbListLock);
|
||||||
|
@ -289,7 +288,7 @@ NpfsDisconnectPipe(PNPFS_CCB Ccb)
|
||||||
{
|
{
|
||||||
RemoveEntryList(Entry);
|
RemoveEntryList(Entry);
|
||||||
Irp = CONTAINING_RECORD(Entry, IRP, Tail.Overlay.DriverContext);
|
Irp = CONTAINING_RECORD(Entry, IRP, Tail.Overlay.DriverContext);
|
||||||
Complete = (NULL == IoSetCancelRoutine(Irp, NULL));
|
Complete = (NULL != IoSetCancelRoutine(Irp, NULL));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Entry = Entry->Flink;
|
Entry = Entry->Flink;
|
||||||
|
|
Loading…
Reference in a new issue