• Andres Freund's avatar
    Properly terminate the array returned by GetLockConflicts(). · 17792bfc
    Andres Freund authored
    GetLockConflicts() has for a long time not properly terminated the
    returned array. During normal processing the returned array is zero
    initialized which, while not pretty, is sufficient to be recognized as
    a invalid virtual transaction id. But the HotStandby case is more than
    aesthetically broken: The allocated (and reused) array is neither
    zeroed upon allocation, nor reinitialized, nor terminated.
    
    Not having a terminating element means that the end of the array will
    not be recognized and that recovery conflict handling will thus read
    ahead into adjacent memory. Only terminating when hitting memory
    content that looks like a invalid virtual transaction id.  Luckily
    this seems so far not have caused significant problems, besides making
    recovery conflict more expensive.
    
    Discussion: 20150127142713.GD29457@awork2.anarazel.de
    
    Backpatch into all supported branches.
    17792bfc
lock.c 121 KB