Hi,
Some comments:
1===
Is there a test case can reproduce the assert fail in SnapBuildGetOrBuildSnapshot()?
2===
We skip xact_decode() when SnapBuildCurrentState(builder) < SNAPBUILD_FULL_SNAPSHOT, but it's a bug, so your NO.3 modification might be wrong.
See threads in this for details: https://commitfest.postgresql.org/patch/5029/
--
Regards,
ChangAo Chen