• Tom Lane's avatar
    Prevent memory leaks in RelationGetIndexList, RelationGetIndexAttrBitmap. · ab8c84db
    Tom Lane authored
    When replacing rd_indexlist, rd_indexattr, etc, we neglected to pfree any
    old value of these fields.  Under ordinary circumstances, the old value
    would always be NULL, so this seemed reasonable enough.  However, in cases
    where we're rebuilding a system catalog's relcache entry and another cache
    flush occurs on that same catalog meanwhile, it's possible for the field to
    not be NULL when we return to the outer level, because we already refilled
    it while recovering from the inner flush.  This leads to a fairly small
    session-lifespan leak in CacheMemoryContext.  In real-world usage the leak
    would be too small to notice; but in testing with CLOBBER_CACHE_RECURSIVELY
    the leakage can add up to the point of causing OOM failures, as reported by
    Tomas Vondra.
    
    The issue has been there a long time, but it only seems worth fixing in
    HEAD, like the previous fix in this area (commit 078b2ed2).
    ab8c84db
relcache.c 159 KB