Thread: FinishPreparedTransaction missing HOLD_INTERRUPTS section

FinishPreparedTransaction missing HOLD_INTERRUPTS section

From
Stas Kelvich
Date:
Hello.

It seems that during COMMIT PREPARED FinishPreparedTransaction() doesn't
hold interrupts around writing to wal and cleaning up ProcArray and GXact
entries. At least RemoveTwoPhaseFile (which is called in between) can print
a warning with ereport(), which, in turn will check for interrupts and
therefore can cancel backend or throw an error before GXact clean-up.

Other similar places like CommitTransaction and PrepareTransaction have
such hold interrupts sections.

--
Stas Kelvich
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company


Attachment

Re: FinishPreparedTransaction missing HOLD_INTERRUPTS section

From
Michael Paquier
Date:
On Sat, Apr 28, 2018 at 12:36:16AM +0300, Stas Kelvich wrote:
> It seems that during COMMIT PREPARED FinishPreparedTransaction() doesn't
> hold interrupts around writing to wal and cleaning up ProcArray and GXact
> entries. At least RemoveTwoPhaseFile (which is called in between) can print
> a warning with ereport(), which, in turn will check for interrupts and
> therefore can cancel backend or throw an error before GXact clean-up.
>
> Other similar places like CommitTransaction and PrepareTransaction have
> such hold interrupts sections.

Good catch!  The places you are suggesting look good to me as well.
That's something which should be back-patched as well.
--
Michael

Attachment

Re: FinishPreparedTransaction missing HOLD_INTERRUPTS section

From
Teodor Sigaev
Date:
Thank you, pushed!

Stas Kelvich wrote:
> Hello.
> 
> It seems that during COMMIT PREPARED FinishPreparedTransaction() doesn't
> hold interrupts around writing to wal and cleaning up ProcArray and GXact
> entries. At least RemoveTwoPhaseFile (which is called in between) can print
> a warning with ereport(), which, in turn will check for interrupts and
> therefore can cancel backend or throw an error before GXact clean-up.
> 
> Other similar places like CommitTransaction and PrepareTransaction have
> such hold interrupts sections.
> 
> --
> Stas Kelvich
> Postgres Professional: http://www.postgrespro.com
> The Russian Postgres Company
> 

-- 
Teodor Sigaev                                   E-mail: teodor@sigaev.ru
                                                    WWW: http://www.sigaev.ru/