• Tom Lane's avatar
    Prevent query-lifespan memory leakage of SP-GiST traversal values. · 467963c3
    Tom Lane authored
    The original coding of the SP-GiST scan traversalValue feature (commit
    ccd6eb49) arranged for traversal values to be stored in the query's main
    executor context.  That's fine if there's only one index scan per query,
    but if there are many, we have a memory leak as successive scans create
    new traversal values.  Fix it by creating a separate memory context for
    traversal values, which we can reset during spgrescan().  Back-patch
    to 9.6 where this code was introduced.
    
    In principle, adding the traversalCxt field to SpGistScanOpaqueData
    creates an ABI break in the back branches.  But I (tgl) have little
    sympathy for extensions including spgist_private.h, so I'm not very
    worried about that.  Alternatively we could stick the new field at the
    end of the struct in back branches, but that has its own downsides.
    
    Anton Dignös, reviewed by Alexander Kuzmenkov
    
    Discussion: https://postgr.es/m/CALNdv1jb6y2Te-m8xHLxLX12RsBmZJ1f4hESX7J0HjgyOhA9eA@mail.gmail.com
    467963c3
spgist_private.h 15.4 KB