Commit d1824a5c authored by Joe Conway's avatar Joe Conway

Fix regression in dblink_disconnect() reported by Eduardo Stern:

persistent_conn was left dangling after a disconnect in the
unnamed connection case, causing a subsequent disconnect to
crash the backend.
parent dd01cfe1
...@@ -256,6 +256,8 @@ dblink_disconnect(PG_FUNCTION_ARGS) ...@@ -256,6 +256,8 @@ dblink_disconnect(PG_FUNCTION_ARGS)
deleteConnection(conname); deleteConnection(conname);
pfree(rcon); pfree(rcon);
} }
else
persistent_conn = NULL;
PG_RETURN_TEXT_P(GET_TEXT("OK")); PG_RETURN_TEXT_P(GET_TEXT("OK"));
} }
......
...@@ -185,13 +185,11 @@ SELECT dblink_disconnect(); ...@@ -185,13 +185,11 @@ SELECT dblink_disconnect();
OK OK
(1 row) (1 row)
-- should generate "no connection to the server" error -- should generate "connection not available" error
SELECT * SELECT *
FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[])
WHERE t.a > 7; WHERE t.a > 7;
ERROR: sql error ERROR: connection not available
DETAIL: no connection to the server
-- put more data into our slave table, first using arbitrary connection syntax -- put more data into our slave table, first using arbitrary connection syntax
-- but truncate the actual return value so we can use diff to check for success -- but truncate the actual return value so we can use diff to check for success
SELECT substr(dblink_exec('dbname=regression','INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6); SELECT substr(dblink_exec('dbname=regression','INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6);
......
...@@ -105,7 +105,7 @@ FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ...@@ -105,7 +105,7 @@ FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]);
-- close the persistent connection -- close the persistent connection
SELECT dblink_disconnect(); SELECT dblink_disconnect();
-- should generate "no connection to the server" error -- should generate "connection not available" error
SELECT * SELECT *
FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[])
WHERE t.a > 7; WHERE t.a > 7;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment