| From: | Michael Paquier <michael(at)paquier(dot)xyz> |
|---|---|
| To: | "Burd, Greg" <gregburd(at)amazon(dot)com> |
| Cc: | "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>, "hlinnaka(at)iki(dot)fi" <hlinnaka(at)iki(dot)fi>, "david(at)pgbackrest(dot)org" <david(at)pgbackrest(dot)org>, "robertmhaas(at)gmail(dot)com" <robertmhaas(at)gmail(dot)com>, "andres(at)anarazel(dot)de" <andres(at)anarazel(dot)de>, "masao(dot)fujii(at)gmail(dot)com" <masao(dot)fujii(at)gmail(dot)com>, "solai(dot)cdac(at)gmail(dot)com" <solai(dot)cdac(at)gmail(dot)com> |
| Subject: | Re: Return pg_control from pg_backup_stop(). |
| Date: | 2026-10-29 23:08:12 |
| Message-ID: | auPR3DKCMNFWHuAB@paquier.xyz |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Thu, Oct 29, 2026 at 06:11:39PM +0000, Burd, Greg wrote:
> Validation of c97931c16d on the same machine: with it applied, three
> runs each of both reproductions give the WARNING and ERROR and no
> crash, and t/010_pg_basebackup.pl passes all 168 tests with no
> backend crash in the server logs. With it reverted, the same TAP run
> logs the SIGSEGV. The test still reports PASS in that case because
> it only checks that pg_basebackup fails.
Ah, thanks for the in-depth investigation. So the previous guess was
really right. Candles work.
> I don't see a better fix on our side. A helper function with
> the array would also work, but palloc0() is simpler, and both rely on
> the same thing: no PG_TRY() frame larger than 4kB. In a core build
> on this machine, the only other function with a frame that large that
> calls sigsetjmp() is be_lo_export() (char buf[BUFSIZE]). Its code
> after sigsetjmp() reloads the constant, so it is fine today, but only
> by luck of register allocation. I haven't checked contrib or other
> GCC versions or as mentioned earlier against their bug system.
Ugh. Even if the buffer itself is not used within the try/catch
block itself? Getting entirely rid of the TRY/CATCH would lead to a
much nicer result overall: we'd be able to keep the local buffer. Or
perhaps go to the simpler solution of a palloc/pfree? I cannot
believe that this extra allocation would matter for lo_export() calls.
If you are proved to be right, it sounds to me that we ought to
fix and backpatch that as well, especially if there is nothing we can
do on the Postgres side. I don't believe in luck and magic when it
comes to software programming.
Thoughts?
--
Michael
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Nikolay Samokhvalov | 2026-10-29 23:26:57 | Re: pg_*_advice: tsv load failure, etc. |
| Previous Message | Lukas Fittl | 2026-10-29 22:58:03 | Fix cumulative WAL statistics double-counting from parallel workers |