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, <tfa...@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@reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev

Reply via email to