Fix for memory leak in dblink
Takahiro Itagaki <itagaki.takahiro@oss.ntt.co.jp>
From: Takahiro Itagaki <itagaki.takahiro@oss.ntt.co.jp>
To: pgsql-hackers@postgresql.org
Date: 2010-01-12T03:43:00Z
Lists: pgsql-hackers
Attachments
- dblink-memleak_20100112.patch (application/octet-stream) patch
There is a memory leak in dblink when we cancel a query during returning tuples. It could leak a PGresult because memory used by it is not palloc'ed one. I wrote a patch[1] before, but I've badly used global variables to track the resource. The attached is a cleaned up patch rewritten to use a tuplestore (SFRM_Materialize mode) to return tuples suggested at [2]. Since we don't return from the dblink function in tuplestore mode, we can surely release the PGresult with a PG_CATCH block even on error. Also, dblink_record_internal() and dblink_fetch() are rearranged to share the same code to return tuples for code refactoring. [1] http://archives.postgresql.org/pgsql-hackers/2009-06/msg01358.php [2] http://archives.postgresql.org/pgsql-hackers/2009-10/msg00292.php Regards, --- Takahiro Itagaki NTT Open Source Software Center