Fix for rare race-condition-like failure: if a backend receives SIGUSR2
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 16 Sep 2002 01:24:41 +0000 (01:24 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 16 Sep 2002 01:24:41 +0000 (01:24 +0000)
commit53e95eee84e0f8c680ad813091e7226abb24214e
tree4d0d595ab7d12d8440bf17537d1deecfeffabbb4
parent5ea9322872c65c5353a305ca5f1c4acfcb486569
Fix for rare race-condition-like failure: if a backend receives SIGUSR2
(notify/SI-overrun interrupt) while it is in process of doing proc_exit,
it is possible for Async_NotifyHandler() to try to start a transaction
when one is already running.  This leads to Asserts() or worse.  I think
it may only be possible to occur when frontend synchronization is lost
(ie, the elog(FATAL) in SocketBackend() fires), but that is a standard
occurrence after error during COPY.  In any case, I have seen this
failure occur during regression tests, so it is definitely possible.
src/backend/commands/async.c
src/backend/tcop/postgres.c