Обсуждение: Why PG_SETMASK() change errno to 0 when there is an elog() callbefore or after it? Is it a bug?

Поиск
Список
Период
Сортировка
In founction ServerLoop() in code postmaster.c, after select(), we called PG_SETMASK(). If l add an elog() after PG_SETMASK(), I see errno is reset to 0 when PG_SETMASK() call suceeded. But the immediately code will actually check errno from the select() call which now has been overwritten by PG_SETMASK(). 

Can someone share some light on this?

Thanks
Congnan

Re: Why PG_SETMASK() change errno to 0 when there is an elog() callbefore or after it? Is it a bug?

От
Andres Freund
Дата:
Hi,

On 2019-01-27 18:21:11 -0800, CNG L wrote:
> In founction ServerLoop() in code postmaster.c, after select(), we called
> PG_SETMASK(). If l add an elog() after PG_SETMASK(), I see errno is reset
> to 0 when PG_SETMASK() call suceeded. But the immediately code will
> actually check errno from the select() call which now has been overwritten
> by PG_SETMASK().

Yes, hat's a bug, we need to restore errno after the setmask. I think I
broke that a few years back, in a39e78b710eb588e102aedd2828611d7bc74714b.
I'll try to fix that later this week - I'm flying to Brussels Tuesday
morning, not sure I can get this done before.

Greetings,

Andres Freund