• Andres Freund's avatar
    Check for interrupts inside the nbtree page deletion code. · 3a01f68e
    Andres Freund authored
    When deleting pages the nbtree code has to walk through siblings of a
    tree node. When those sibling links are corrupted that can lead to
    endless loops - which are currently not interruptible.  This is
    especially problematic if autovacuum is repeatedly blocked on such
    indexes, as it can be hard to get out of that situation without
    resorting to single user mode.
    
    Thus add interrupt checks to appropriate places in such
    loops. Unfortunately in one of the cases it's it's not easy to do so.
    
    Between 9.3 and 9.4 the page deletion (and page split) code changed
    significantly. Before it was significantly less robust against
    interruptions. Therefore don't backpatch to 9.3.
    
    Author: Andres Freund
    Discussion: https://postgr.es/m/20180627191629.wkunw2qbibnvlz53@alap3.anarazel.de
    Backpatch: 9.4-
    3a01f68e
nbtpage.c 62.6 KB