• Alexander Korotkov's avatar
    Fix deadlock between ginDeletePage() and ginStepRight() · e1464119
    Alexander Korotkov authored
    When ginDeletePage() is about to delete page it locks its left sibling to revise
    the rightlink.  So, it locks pages in right to left manner.  Int he same time
    ginStepRight() locks pages in left to right manner, and that could cause a
    deadlock.
    
    This commit makes ginScanToDelete() keep exclusive lock on left siblings of
    currently investigated path.  That elimites need to relock left sibling in
    ginDeletePage().  Thus, deadlock with ginStepRight() can't happen anymore.
    
    Reported-by: Chen Huajun
    Discussion: https://postgr.es/m/5c332bd1.87b6.16d7c17aa98.Coremail.chjischj%40163.com
    Author: Alexander Korotkov
    Reviewed-by: Peter Geoghegan
    Backpatch-through: 10
    e1464119
README 20.3 KB