23.03.2018 17:59, Amit Kapila пишет: > On Sat, Mar 10, 2018 at 7:41 AM, Yura Sokolov <funny.fal...@gmail.com> wrote: >> 08.03.2018 03:42, Tomas Vondra пишет: >>> One reason against building the hash table in GetSnapshotData is that >>> we'd build it even when the snapshot is never queried. Or when it is >>> queried, but we only need to check xmin/xmax. >> >> Thank you for analyze, Tomas. >> >> Stephen is right about bug in snapmgr.c >> Attached version fixes bug, and also simplifies XidInXip a bit. >> > > @@ -2167,8 +2175,7 @@ RestoreSnapshot(char *start_address) > /* Copy SubXIDs, if present. */ > if (serialized_snapshot.subxcnt > 0) > { > - snapshot->subxip = ((TransactionId *) (snapshot + 1)) + > - serialized_snapshot.xcnt; > + snapshot->subxip = ((TransactionId *) (snapshot + 1)) + xcnt; > memcpy(snapshot->subxip, serialized_xids + serialized_snapshot.xcnt, > serialized_snapshot.subxcnt * sizeof(TransactionId)); > } > > > It is not clear why you want to change this in RestoreSnapshot when > nothing related is changed in SerializeSnapshot? Can you please add > some comments to clarify it? >
I didn't change serialized format. Therefore is no need to change SerializeSnapshot. But in-memory representation were changed, so RestoreSnapshot is changed. With regards, Sokolov Yura.