[PATCH 1/1] Cygwin: don't allow getpgrp() to fail
Ken Brown
kbrown@cornell.edu
Wed Jul 24 15:04:00 GMT 2019
On 7/23/2019 3:16 PM, Corinna Vinschen wrote:
> On Jul 23 19:07, Jon Turney wrote:
>> On 23/07/2019 17:54, Corinna Vinschen wrote:
>>> Hi Ken,
>>>
>>> On Jul 23 16:12, Ken Brown wrote:
>>>> According to POSIX, "The getpgrp() function shall always be successful
>>>> and no return value is reserved to indicate an error." Cygwin's
>>>> getpgrp() is defined in terms of getpgid(), which is allowed to fail.
>>>
>>> But it shouldn't fail for the current process. Why should pinfo::init
>>> fail for myself if it begins like this?
>>>
>>> if (myself && n == myself->pid)
>>> {
>>> procinfo = myself;
>>> destroy = 0;
>>> return;
>>> }
>>>
>>> I fear this patch would only cover up the problem still persisting
>>> under the hood.
>>
>> I agree.
>>
>> There is presumably a class of programs which require getpgrp() to return
>> the correct value for correct operation, which cannot be 0 (since that
>> cannot be a pid).
>
> However, did we ever see this problem outside of GDB?
I think I've found the problem, as I just reported on the main cygwin list. And
I agree that my patch was misguided.
But I still think getpgrp() should be changed, perhaps by having it just return
myself->pgid as you suggested earlier. There's no point in having getpgrp()
call getpgid(), which does error checking, when POSIX specifically says "no
return value [of getpgrp()] is reserved to indicate an error". POSIX-compatible
applications should call getpgid(0) instead of getpgrp() if they want to do
error checking.
I'll send a couple of patches, one for this issue and one for the tcsetpgrp()
problem, so that we can discuss it further.
Ken
More information about the Cygwin-patches
mailing list