• T
    Avoid potential deadlock in InitCatCachePhase2(). · cf735470
    Tom Lane 提交于
    Opening a catcache's index could require reading from that cache's own
    catalog, which of course would acquire AccessShareLock on the catalog.
    So the original coding here risks locking index before heap, which could
    deadlock against another backend trying to get exclusive locks in the
    normal order.  Because InitCatCachePhase2 is only called when a backend
    has to start up without a relcache init file, the deadlock was seldom seen
    in the field.  (And by the same token, there's no need to worry about any
    performance disadvantage; so not much point in trying to distinguish
    exactly which catalogs have the risk.)
    
    Bug report, diagnosis, and patch by Nikhil Sontakke.  Additional commentary
    by me.  Back-patch to all supported branches.
    cf735470
relcache.c 123.3 KB