mirror of
https://github.com/php/php-src.git
synced 2024-11-23 18:04:36 +08:00
Fix GH-13519: PGSQL_CONNECT_FORCE_RENEW with persistent connections.
persistent connections did not take in account this flag, after the usual link sanity checks, we remove its entry. Close GH-13519
This commit is contained in:
parent
b8a1041fd2
commit
b9a9790be0
2
NEWS
2
NEWS
@ -31,6 +31,8 @@ PHP NEWS
|
||||
- PGSQL:
|
||||
. Fixed bug GH-13354 (pg_execute/pg_send_query_params/pg_send_execute
|
||||
with null value passed by reference). (George Barbarosie)
|
||||
. Fixed bug GH-13519 (PGSQL_CONNECT_FORCE_RENEW not working with persistent
|
||||
connections. (David Carlier)
|
||||
|
||||
- Standard:
|
||||
. Fixed array key as hash to string (case insensitive) comparison typo
|
||||
|
@ -562,6 +562,7 @@ static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
|
||||
|
||||
/* try to find if we already have this link in our persistent list */
|
||||
if ((le = zend_hash_find_ptr(&EG(persistent_list), str.s)) == NULL) { /* we don't */
|
||||
newpconn:
|
||||
if (PGG(max_links) != -1 && PGG(num_links) >= PGG(max_links)) {
|
||||
php_error_docref(NULL, E_WARNING,
|
||||
"Cannot create new link. Too many open links (" ZEND_LONG_FMT ")", PGG(num_links));
|
||||
@ -590,6 +591,12 @@ static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
|
||||
PGG(num_links)++;
|
||||
PGG(num_persistent)++;
|
||||
} else { /* we do */
|
||||
if ((connect_type & PGSQL_CONNECT_FORCE_NEW)) {
|
||||
if (zend_hash_del(&EG(persistent_list), str.s) != SUCCESS) {
|
||||
goto err;
|
||||
}
|
||||
goto newpconn;
|
||||
}
|
||||
if (le->type != le_plink) {
|
||||
goto err;
|
||||
}
|
||||
|
30
ext/pgsql/tests/gh13519.phpt
Normal file
30
ext/pgsql/tests/gh13519.phpt
Normal file
@ -0,0 +1,30 @@
|
||||
--TEST--
|
||||
GH-13519 - PGSQL_CONNECT_FORCE_NEW with persistent connections.
|
||||
--EXTENSIONS--
|
||||
pgsql
|
||||
--SKIPIF--
|
||||
<?php include("skipif.inc"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
include 'config.inc';
|
||||
|
||||
$db1 = pg_pconnect($conn_str);
|
||||
$pid1 = pg_get_pid($db1);
|
||||
for ($i = 0; $i < 3; $i ++) {
|
||||
$db2 = pg_pconnect($conn_str);
|
||||
var_dump($pid1 === pg_get_pid($db2));
|
||||
}
|
||||
for ($i = 0; $i < 3; $i ++) {
|
||||
$db2 = pg_pconnect($conn_str, PGSQL_CONNECT_FORCE_NEW);
|
||||
var_dump($pid1 === pg_get_pid($db2));
|
||||
pg_close($db2);
|
||||
}
|
||||
pg_close($db1);
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(false)
|
Loading…
Reference in New Issue
Block a user