I read the diff backward. I agree with the *actual* change, which is why I
was concerned about the opposite ;-)
Best regards,
Alex Ionescu
On Wed, Sep 16, 2015 at 5:42 AM, Thomas Faber <thomas.faber(a)reactos.org>
wrote:
You mean KernelMode->UserMode in the
KeWaitForSingleObject call?
The only purpose of this wait is to fulfill a user request (namely a
read operation). If the thread performing the read is terminated,
there's no reason to stick around in msfs until data is available in the
mailslot. The wait should instead be aborted and the thread allowed
to terminate, which is exactly what this change will achieve.
On 2015-09-16 02:27, Alex Ionescu wrote:
I'm not convinced on the user->kernel
changes Thomas.
Best regards,
Alex Ionescu
On Tue, Sep 15, 2015 at 5:40 AM, <tfaber(a)svn.reactos.org> wrote:
> --- 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
> @@ -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)
> {
_______________________________________________
Ros-dev mailing list
Ros-dev(a)reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev