cygwin 3.3.x: another problem that may be related to pipes
Tue Nov 16 10:20:15 GMT 2021
On Tue, 16 Nov 2021 18:45:15 +0900
Takashi Yano wrote:
> Hi Ken,
> I noticed the following while fixing this issue.
> We now noticed that NtWriteFile() may return STATUS_PENDING
> even in nonblocking mode.
> If NtWriteFile() returns STATUS_PENDING in nonblocking mode,
> does not the following 'if' block in raw_write() refer to
> uninitialized io.Information?
> while (len1 > 0)
> status = NtWriteFile (get_handle (), evt, NULL, NULL, &io,
> (PVOID) ptr, len1, NULL, NULL);
> if (evt || !NT_SUCCESS (status) || io.Information > 0
> || len <= PIPE_BUF)
> len1 >>= 1;
> 'evt' is false if we are in nonblocking mode.
> '!NT_SUCCESS(status)' is false if status == STATUS_PENDING.
> Then io.Information would be referred I think.
> Isn't this another bug in raw_write()?
> What should we do in this case? Should we do like:
> if (evt || !NT_SUCCESS (status) || status == STATUS_PENDING
> || io.Information > 0 || len <= PIPE_BUF)
Answer to myself.
I think moving cygwait(evt, ...) before this 'if' block is the
Right? If so, I will submit v3 patch.
Takashi Yano <email@example.com>
More information about the Cygwin-developers