[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...
Thomas Faber
thomas.faber at reactos.org
Wed Sep 16 09:42:10 UTC 2015
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 at 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)
>> {
More information about the Ros-dev
mailing list