• Thomas Munro's avatar
    Fix segment_bins corruption in dsa.c. · 38763d67
    Thomas Munro authored
    If a segment has been freed by dsa.c because it is entirely empty, other
    backends must make sure to unmap it before following links to new
    segments that might happen to have the same index number, or they could
    finish up looking at a defunct segment and then corrupt the segment_bins
    lists.  The correct protocol requires checking freed_segment_counter
    after acquiring the area lock and before resolving any index number to a
    segment.  Add the missing checks and an assertion.
    
    Back-patch to 10, where dsa.c first arrived.
    
    Author: Thomas Munro
    Reported-by: Tomas Vondra
    Discussion: https://postgr.es/m/CAEepm%3D0thg%2Bja5zGVa7jBy-uqyHrTqTm8HGhEOtMmigGrAqTbw%40mail.gmail.com
    38763d67
dsa.c 75.3 KB