I'm not convinced on the user->kernel changes Thomas. Best regards, Alex Ionescu
On Tue, Sep 15, 2015 at 5:40 AM, <tfa...@svn.reactos.org> wrote: > Author: tfaber > Date: Tue Sep 15 09:40:30 2015 > New Revision: 69236 > > URL: http://svn.reactos.org/svn/reactos?rev=69236&view=rev > Log: > [MSFS] > - Use a NULL timeout for infinite waits instead of waiting for 100 ns. > CORE-10188 #resolve > - Wait for available read data in user mode to handle thread termination > - Return STATUS_IO_TIMEOUT also for a zero-length timeout. Fixes Wine tests > - Avoid MmGetSystemAddressForMdl > - Acquiring a mutex is not a UserRequest > > Modified: > trunk/reactos/drivers/filesystems/msfs/msfs.h > trunk/reactos/drivers/filesystems/msfs/rw.c > > Modified: trunk/reactos/drivers/filesystems/msfs/msfs.h > URL: > http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/msfs/msfs.h?rev=69236&r1=69235&r2=69236&view=diff > > ============================================================================== > --- trunk/reactos/drivers/filesystems/msfs/msfs.h [iso-8859-1] > (original) > +++ trunk/reactos/drivers/filesystems/msfs/msfs.h [iso-8859-1] Tue > Sep 15 09:40:30 2015 > @@ -54,7 +54,7 @@ > > > #define KeLockMutex(x) KeWaitForSingleObject(x, \ > - UserRequest, \ > + Executive, \ > KernelMode, \ > FALSE, \ > NULL); > > Modified: trunk/reactos/drivers/filesystems/msfs/rw.c > URL: > http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/msfs/rw.c?rev=69236&r1=69235&r2=69236&view=diff > > ============================================================================== > --- trunk/reactos/drivers/filesystems/msfs/rw.c [iso-8859-1] (original) > +++ trunk/reactos/drivers/filesystems/msfs/rw.c [iso-8859-1] Tue Sep 15 > 09:40:30 2015 > @@ -29,6 +29,7 @@ > ULONG LengthRead = 0; > PVOID Buffer; > NTSTATUS Status; > + PLARGE_INTEGER Timeout; > > DPRINT("MsfsRead(DeviceObject %p Irp %p)\n", DeviceObject, Irp); > > @@ -52,16 +53,21 @@ > > Length = IoStack->Parameters.Read.Length; > if (Irp->MdlAddress) > - Buffer = MmGetSystemAddressForMdl (Irp->MdlAddress); > + Buffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, > NormalPagePriority); > else > Buffer = Irp->UserBuffer; > > + if (Fcb->TimeOut.QuadPart == -1LL) > + Timeout = NULL; > + else > + Timeout = &Fcb->TimeOut; > + > Status = KeWaitForSingleObject(&Fcb->MessageEvent, > UserRequest, > - KernelMode, > + UserMode, > FALSE, > - &Fcb->TimeOut); > - if (NT_SUCCESS(Status)) > + Timeout); > + if (Status != STATUS_USER_APC) > { > if (Fcb->MessageCount > 0) > { > @@ -84,7 +90,7 @@ > KeClearEvent(&Fcb->MessageEvent); > } > } > - else if (Fcb->TimeOut.QuadPart != 0LL) > + else > { > /* No message found after waiting */ > Status = STATUS_IO_TIMEOUT; > @@ -135,7 +141,7 @@ > > Length = IoStack->Parameters.Write.Length; > if (Irp->MdlAddress) > - Buffer = MmGetSystemAddressForMdl (Irp->MdlAddress); > + Buffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, > NormalPagePriority); > else > Buffer = Irp->UserBuffer; > > > >
_______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev