Fix typo in ReorderBufferIterTXNInit().
authorTom Lane <[email protected]>
Thu, 30 Jun 2016 16:37:02 +0000 (12:37 -0400)
committerTom Lane <[email protected]>
Thu, 30 Jun 2016 16:37:02 +0000 (12:37 -0400)
This looks like it would cause changes from subtransactions to be missed
by the iterator being constructed, if those changes had been spilled to
disk previously.  This implies that large subtransactions might be lost
(in whole or in part) by logical replication.  Found and fixed by
Petru-Florin Mihancea, per bug #14208.

Report: <20160622144830[email protected]>

src/backend/replication/logical/reorderbuffer.c

index 00e31a2d7408cfec1d700a083813f5686a3112d1..12e01edb3f7c3e73c38aa23fc202222530558e47 100644 (file)
@@ -960,7 +960,7 @@ ReorderBufferIterTXNInit(ReorderBuffer *rb, ReorderBufferTXN *txn)
        {
            ReorderBufferChange *cur_change;
 
-           if (txn->nentries != txn->nentries_mem)
+           if (cur_txn->nentries != cur_txn->nentries_mem)
                ReorderBufferRestoreChanges(rb, cur_txn,
                                            &state->entries[off].fd,
                                            &state->entries[off].segno);