Re: LISTEN/NOTIFY bug: VACUUM sets frozenxid past a xid in async queue

From: Álvaro Herrera <alvherre(at)kurilemu(dot)de>
To: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
Cc: Matheus Alcantara <matheusssilv97(at)gmail(dot)com>, Arseniy Mukhin <arseniy(dot)mukhin(dot)dev(at)gmail(dot)com>, Joel Jacobson <joel(at)compiler(dot)org>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: LISTEN/NOTIFY bug: VACUUM sets frozenxid past a xid in async queue
Date: 2025-11-07 14:14:31
Message-ID: 202511071410.52ll56eyixx7@alvherre.pgsql
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

One thing I noticed while testing this is that asyncQueueAddEntries()
fills the end of a page with a dummy entry, when the next notify doesn't
fit. However, this dummy entry contains a very valid TransactionId,
which the new freezing code will try to look up and freeze. I think
this is somewhat bogus -- we shouldn't even try to look up that XID in
the first place. I propose to clear it like this

@@ -1419,6 +1424,7 @@ asyncQueueAddEntries(ListCell *nextNotify)
*/
qe.length = QUEUE_PAGESIZE - offset;
qe.dboid = InvalidOid;
+ qe.xid = InvalidTransactionId;
qe.data[0] = '\0'; /* empty channel */
qe.data[1] = '\0'; /* empty payload */
}

(Line numbers do not match, because I have other local changes.)

--
Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/
"I'm always right, but sometimes I'm more right than other times."
(Linus Torvalds)
https://lore.kernel.org/git/Pine(dot)LNX(dot)4(dot)58(dot)0504150753440(dot)7211(at)ppc970(dot)osdl(dot)org/

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Akshay Joshi 2025-11-07 14:27:06 Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement
Previous Message cca5507 2025-11-07 14:00:15 Minor refactor of the code in ExecScanExtended()