Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix ancient connection leak in dblink
authorJoe Conway <mail@joeconway.com>
Sat, 11 Mar 2017 21:33:14 +0000 (13:33 -0800)
committerJoe Conway <mail@joeconway.com>
Sat, 11 Mar 2017 21:33:14 +0000 (13:33 -0800)
When using unnamed connections with dblink, every time a new
connection is made, the old one is leaked. Fix that.

This has been an issue probably since dblink was first committed.
Someone complained almost ten years ago, but apparently I decided
not to pursue it at the time, and neither did anyone else, so it
slipped between the cracks. Now that someone else has complained,
fix in all supported branches.

Discussion: (orig) https://postgr.es/m/flat/F680AB59-6D6F-4026-9599-1BE28880273D%40decibel.org#F680AB59-6D6F-4026-9599-1BE28880273D@decibel.org
Discussion: (new) https://postgr.es/m/flat/0A3221C70F24FB45833433255569204D1F6ADF8C@G01JPEXMBYT05
Reported by: Jim Nasby and Takayuki Tsunakawa

contrib/dblink/dblink.c

index 38b46b04f0ad443e9ef173a5df8890da1d1c0642..85ba2a8d1ad44164f5e85ea6c4db504b53555d7a 100644 (file)
@@ -301,7 +301,11 @@ dblink_connect(PG_FUNCTION_ARGS)
        createNewConnection(connname, rconn);
    }
    else
+   {
+       if (pconn->conn)
+           PQfinish(pconn->conn);
        pconn->conn = conn;
+   }
 
    PG_RETURN_TEXT_P(cstring_to_text("OK"));
 }