[ros-dev] [ros-diffs] [tfaber] 69236: [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 S...
Alex Ionescu
ionucu at videotron.ca
Wed Sep 16 00:27:22 UTC 2015
I'm not convinced on the user->kernel changes Thomas.
Best regards,
Alex Ionescu
On Tue, Sep 15, 2015 at 5:40 AM, <tfaber at 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;
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.reactos.org/pipermail/ros-dev/attachments/20150915/5dc1d141/attachment.html>
More information about the Ros-dev
mailing list