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

Started by CNG Labout 7 years ago2 messagesbugs
Jump to latest
#1CNG L
congnanluo@gmail.com

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

#2Andres Freund
andres@anarazel.de
In reply to: CNG L (#1)
Re: Why PG_SETMASK() change errno to 0 when there is an elog() call before or after it? Is it a bug?

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