diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c index e2d79e20b44f0c733e8ed16337e7fe26344fdb5a..d660ce5af78aefaa4dcb5576db722269603d5133 100644 --- a/src/backend/storage/lmgr/predicate.c +++ b/src/backend/storage/lmgr/predicate.c @@ -2535,9 +2535,12 @@ TransferPredicateLocksToNewTarget(const PREDICATELOCKTARGETTAG oldtargettag, if (!found) { SHMQueueInit(&(newtarget->predicateLocks)); - newpredlocktag.myTarget = newtarget; + newtarget->priorVersionOfRow = NULL; + newtarget->nextVersionOfRow = NULL; } + newpredlocktag.myTarget = newtarget; + oldpredlock = (PREDICATELOCK *) SHMQueueNext(&(oldtarget->predicateLocks), &(oldtarget->predicateLocks), @@ -2586,10 +2589,14 @@ TransferPredicateLocksToNewTarget(const PREDICATELOCKTARGETTAG oldtargettag, outOfShmem = true; goto exit; } - SHMQueueInsertBefore(&(newtarget->predicateLocks), - &(newpredlock->targetLink)); - SHMQueueInsertBefore(&(newpredlocktag.myXact->predicateLocks), - &(newpredlock->xactLink)); + if (!found) + { + SHMQueueInsertBefore(&(newtarget->predicateLocks), + &(newpredlock->targetLink)); + SHMQueueInsertBefore(&(newpredlocktag.myXact->predicateLocks), + &(newpredlock->xactLink)); + newpredlock->commitSeqNo = InvalidSerCommitSeqNo; + } oldpredlock = nextpredlock; }