Re: BUG #17122: panic on prepare with subsequent pg_advisory_lock() and pg_advisory_xact_lock_shared()
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: a.pyhalov@postgrespro.ru
Cc: pgsql-bugs@lists.postgresql.org
Date: 2021-07-23T16:12:46Z
Lists: pgsql-bugs
PG Bug reporting form <noreply@postgresql.org> writes: > The following statements lead to panic: > begin; > select pg_advisory_lock(1); > select pg_advisory_xact_lock_shared(1); > prepare transaction 'test'; Thanks for the report! Looks like the shared lock is sufficient to cause the problem: regression=# begin; BEGIN regression=*# select pg_advisory_xact_lock_shared(1); pg_advisory_xact_lock_shared ------------------------------ (1 row) regression=*# prepare transaction 'test'; PANIC: we seem to have dropped a bit somewhere server closed the connection unexpectedly Taking only the other lock works fine. Even more interesting, "select pg_advisory_xact_lock(1);" also works, as does "select pg_advisory_lock_shared(1);". So it's specific to xact-level shared locks, which seems downright weird. I also tried this: regression=# begin; BEGIN regression=*# select pg_advisory_lock_shared(1); pg_advisory_lock_shared ------------------------- (1 row) regression=*# select pg_advisory_xact_lock(1); pg_advisory_xact_lock ----------------------- (1 row) regression=*# select pg_advisory_lock(1); pg_advisory_lock ------------------ (1 row) regression=*# prepare transaction 'test'; ERROR: cannot PREPARE while holding both session-level and transaction-level locks on the same object which makes me wonder why we didn't issue that error in your example case. However, that's not sufficient to explain the crash with only the xact-shared lock. BTW, note that we do manage to prepare the transaction before crashing, so you must do commit prepared 'test'; to clean up before trying again. regards, tom lane
Commits
-
Fix check for conflicting session- vs transaction-level locks.
- f47408cdc19c 13.4 landed
- 899785b4f6c8 12.8 landed
- 7b2262a21cde 11.13 landed
- 712ba6b8b738 14.0 landed
- 654372169b89 10.18 landed
- 6310809c4aa1 15.0 landed
- 1861390e6cf5 9.6.23 landed