Move the I/O completion port setting to second stage and fix the async I/O

test. Thanks to Alex Ionescu for explaining this stuff to me.

svn path=/trunk/; revision=12348
This commit is contained in:
Gé van Geldorp
2004-12-26 21:18:34 +00:00
parent 46016205f7
commit 0afb1fb12d
2 changed files with 15 additions and 14 deletions

View File

@@ -300,5 +300,19 @@ IoSecondStageCompletion(
}
if (NULL != IoStack->FileObject
&& NULL != IoStack->FileObject->CompletionContext
&& (0 != (Irp->Flags & IRP_SYNCHRONOUS_API)
|| 0 == (IoStack->FileObject->Flags & FO_SYNCHRONOUS_IO)))
{
PFILE_OBJECT FileObject = IoStack->FileObject;
IoSetIoCompletion(FileObject->CompletionContext->Port,
FileObject->CompletionContext->Key,
Irp->Overlay.AsynchronousParameters.UserApcContext,
Irp->IoStatus.Status,
Irp->IoStatus.Information,
FALSE);
}
IoFreeIrp(Irp);
}

View File

@@ -1,4 +1,4 @@
/* $Id: irp.c,v 1.71 2004/12/26 15:55:14 gvg Exp $
/* $Id: irp.c,v 1.72 2004/12/26 21:18:34 gvg Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@@ -447,19 +447,6 @@ IofCompleteRequest(PIRP Irp,
//Windows NT File System Internals, page 154
OriginalFileObject = Irp->Tail.Overlay.OriginalFileObject;
if (NULL != Stack->FileObject
&& NULL != Stack->FileObject->CompletionContext
&& Irp->PendingReturned)
{
PFILE_OBJECT FileObject = Stack->FileObject;
IoSetIoCompletion(FileObject->CompletionContext->Port,
FileObject->CompletionContext->Key,
Irp->Overlay.AsynchronousParameters.UserApcContext,
Irp->IoStatus.Status,
Irp->IoStatus.Information,
FALSE);
}
if (Irp->PendingReturned || KeGetCurrentIrql() == DISPATCH_LEVEL)
{
BOOLEAN bStatus;