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.
This commit is contained in:
parent
dd01cfe1c4
commit
d1824a5ccb
@ -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();
|
|||||||
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[]);
|
|||||||
-- 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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user