• Tom Lane's avatar
    In libpq, free any partial query result before collecting a server error. · d25c2ee9
    Tom Lane authored
    We'd throw away the partial result anyway after parsing the error message.
    Throwing it away beforehand costs nothing and reduces the risk of
    out-of-memory failure.  Also, at least in systems that behave like
    glibc/Linux, if the partial result was very large then the error PGresult
    would get allocated at high heap addresses, preventing the heap storage
    used by the partial result from being released to the OS until the error
    PGresult is freed.
    
    In psql >= 9.6, we hold onto the error PGresult until another error is
    received (for \errverbose), so that this behavior causes a seeming
    memory leak to persist for awhile, as in a recent complaint from
    Darafei Praliaskouski.  This is a potential performance regression from
    older versions, justifying back-patching at least that far.  But similar
    behavior may occur in other client applications, so it seems worth just
    back-patching to all supported branches.
    
    Discussion: https://postgr.es/m/CAC8Q8tJ=7cOkPePyAbJE_Pf691t8nDFhJp0KZxHvnq_uicfyVg@mail.gmail.com
    d25c2ee9
fe-protocol2.c 41.2 KB