diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c
index ab6bae3b6e..ca56f7bfe3 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -247,15 +247,18 @@ struct SnapBuild
 	 * and were running when the snapshot was serialized.
 	 *
 	 * We normally rely on HEAP2_NEW_CID and XLOG_XACT_INVALIDATIONS records to
-	 * know if the transaction has changed the catalog. But it could happen that
-	 * the logical decoding decodes only the commit record of the transaction.
-	 * This array stores the transactions that have modified catalogs and were
-	 * running when serializing a snapshot, and this array is used to add such
-	 * transactions to the snapshot.
+	 * know if the transaction has changed the catalog. But it could happen
+	 * that the logical decoding decodes only the commit record of the
+	 * transaction after restoring the previously serialized snapshot in which
+	 * case we will miss adding the xid to the snapshot and end up looking at
+	 * the catalogs with the wrong snapshot.
 	 *
-	 * This array is set once when restoring the snapshot, we remove xids from
-	 * this array when they become old enough to matter, and then it eventually
-	 * becomes empty.
+	 * Now to avoid the above problem, we serialize the transactions that had
+	 * modified the catalogs and are still running at the time of snapshot
+	 * serialization. We fill this array while restoring the snapshot and then
+	 * refer it while decoding commit to ensure if the xact has modified the
+	 * catalog. We remove xids from this array when they become old enough to
+	 * matter, and then it eventually becomes empty.
 	 */
 	struct
 	{
@@ -924,9 +927,9 @@ SnapBuildAddCommittedTxn(SnapBuild *builder, TransactionId xid)
  * the ->committed or ->catchange array, respectively. The committed xids will
  * get checked via the clog machinery.
  *
- * We can ideally remove the transaction
- * from catchange array once it is finished (committed/aborted) but that could
- * be costly as we need to maintain the xids order in the array.
+ * We can ideally remove the transaction from catchange array once it is
+ * finished (committed/aborted) but that could be costly as we need to maintain
+ * the xids order in the array.
  */
 static void
 SnapBuildPurgeOlderTxn(SnapBuild *builder)
@@ -1171,8 +1174,8 @@ SnapBuildXidHasCatalogChanges(SnapBuild *builder, TransactionId xid,
 		return true;
 
 	/*
-	 * If the commit record of the transaction does not have invalidation
-	 * messages, it did not change catalogs for sure.
+	 * The transactions that have changed catalogs must have invalidation
+	 * info.
 	 */
 	if (!(xinfo & XACT_XINFO_HAS_INVALS))
 		return false;
