Re: Signals in a BGW - Mailing list pgsql-hackers

From Chapman Flack
Subject Re: Signals in a BGW
Date
Msg-id 06c4ba8e-d7c9-00af-b204-6d8d8067f271@anastigmatix.net
Whole thread Raw
In response to Re: Signals in a BGW  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
On 12/07/2017 02:58 PM, Andres Freund wrote:
> On 2017-12-07 12:35:07 -0500, Robert Haas wrote:
>> On Wed, Dec 6, 2017 at 6:59 PM, Chapman Flack <chap@anastigmatix.net> wrote:
>>>> The default handler is bgworker_die ; see src/backend/postmaster
>>>> /bgworker.c
>>>> . I don't know if elog() is safe in a signal handler, but I guess in
>>>> the absence of non-reentrant errcontext functions...
>>>
>>> That does seem bold, doesn't it?
>>
>> Yes, I think it's flat busted.
> 
> We've had that discussion a couple times. The concensus so far has been
> that FATALing is considered kinda ok, everything else not. But it
> definitely has caused issues in the ast, mostly due to malloc being
> entered while already in malloc.

Well, bgworker.c:bgworker_die() FATALs, so that might be kinda ok,
but postgres.c:FloatExceptionHandler() ERRORs, so what's up with that?

Has it just not caused much trouble because the existing math
operators test their operands rather than relying on exceptions,
and it might only get called in case of some extension that did
float operations without checking?

I admit I've been trying to think of a better thing it could do,
and it seems challenging ... ideally you'd want an ERROR to happen,
and soon (before trying to evaluate more of the expression), from
code that might not be checking right away ... but how could that
be made to work?

-Chap


pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: Postgres with pthread
Next
From: Robert Haas
Date:
Subject: Re: Logical replication without a Primary Key