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/[email protected]/


Reply via email to