mirror of
https://github.com/php/php-src.git
synced 2025-08-18 06:58:55 +02:00
Fix possible bug with persistent connections
This commit is contained in:
parent
0a7198a297
commit
fd699ce7d3
4 changed files with 22 additions and 9 deletions
|
@ -813,7 +813,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
#ifdef MYSQL_USE_MYSQLND
|
#ifdef MYSQL_USE_MYSQLND
|
||||||
mysqlnd_restart_psession(mysql->conn);
|
mysqlnd_restart_psession(mysql->conn, MySG(mysqlnd_thd_zval_cache));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,7 +165,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
|
||||||
if (!mysql_ping(mysql->mysql)) {
|
if (!mysql_ping(mysql->mysql)) {
|
||||||
#endif
|
#endif
|
||||||
#ifdef MYSQLI_USE_MYSQLND
|
#ifdef MYSQLI_USE_MYSQLND
|
||||||
mysqlnd_restart_psession(mysql->mysql);
|
mysqlnd_restart_psession(mysql->mysql, MyG(mysqlnd_thd_zval_cache));
|
||||||
#endif
|
#endif
|
||||||
MyG(num_active_persistent)++;
|
MyG(num_active_persistent)++;
|
||||||
goto end;
|
goto end;
|
||||||
|
|
|
@ -442,7 +442,7 @@ MYSQLND_METHOD(mysqlnd_conn, set_server_option)(MYSQLND * const conn,
|
||||||
|
|
||||||
|
|
||||||
/* {{{ _mysqlnd_restart_psession */
|
/* {{{ _mysqlnd_restart_psession */
|
||||||
PHPAPI void _mysqlnd_restart_psession(MYSQLND *conn TSRMLS_DC)
|
PHPAPI void _mysqlnd_restart_psession(MYSQLND *conn, MYSQLND_THD_ZVAL_PCACHE *cache TSRMLS_DC)
|
||||||
{
|
{
|
||||||
DBG_ENTER("_mysqlnd_restart_psession");
|
DBG_ENTER("_mysqlnd_restart_psession");
|
||||||
MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_CONNECT_REUSED);
|
MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_CONNECT_REUSED);
|
||||||
|
@ -451,15 +451,27 @@ PHPAPI void _mysqlnd_restart_psession(MYSQLND *conn TSRMLS_DC)
|
||||||
mnd_pefree(conn->last_message, conn->persistent);
|
mnd_pefree(conn->last_message, conn->persistent);
|
||||||
conn->last_message = NULL;
|
conn->last_message = NULL;
|
||||||
}
|
}
|
||||||
|
conn->zval_cache = cache;
|
||||||
DBG_VOID_RETURN;
|
DBG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
|
||||||
/* {{{ mysqlnd_end_psession */
|
/* {{{ _mysqlnd_end_psession */
|
||||||
PHPAPI void mysqlnd_end_psession(MYSQLND *conn)
|
PHPAPI void _mysqlnd_end_psession(MYSQLND *conn TSRMLS_DC)
|
||||||
{
|
{
|
||||||
|
DBG_ENTER("_mysqlnd_end_psession");
|
||||||
|
/*
|
||||||
|
BEWARE!!!! This will have a problem with a query cache.
|
||||||
|
We need to move the data out of the zval cache before we end the psession.
|
||||||
|
Or we will use nirvana pointers!!
|
||||||
|
*/
|
||||||
|
if (conn->zval_cache) {
|
||||||
|
DBG_INF("Freeing zval cache reference");
|
||||||
|
mysqlnd_palloc_free_thd_cache_reference(&conn->zval_cache);
|
||||||
|
conn->zval_cache = NULL;
|
||||||
|
}
|
||||||
|
DBG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
|
|
@ -67,9 +67,10 @@
|
||||||
void mysqlnd_library_init(TSRMLS_D);
|
void mysqlnd_library_init(TSRMLS_D);
|
||||||
void mysqlnd_library_end(TSRMLS_D);
|
void mysqlnd_library_end(TSRMLS_D);
|
||||||
|
|
||||||
#define mysqlnd_restart_psession(conn) _mysqlnd_restart_psession((conn) TSRMLS_CC)
|
#define mysqlnd_restart_psession(conn, cache) _mysqlnd_restart_psession((conn), (cache) TSRMLS_CC)
|
||||||
PHPAPI void _mysqlnd_restart_psession(MYSQLND *conn TSRMLS_DC);
|
PHPAPI void _mysqlnd_restart_psession(MYSQLND *conn, MYSQLND_THD_ZVAL_PCACHE *cache TSRMLS_DC);
|
||||||
PHPAPI void mysqlnd_end_psession(MYSQLND *conn);
|
#define mysqlnd_end_psession(conn) _mysqlnd_end_psession((conn) TSRMLS_CC)
|
||||||
|
PHPAPI void _mysqlnd_end_psession(MYSQLND *conn TSRMLS_DC);
|
||||||
PHPAPI void mysqlnd_minfo_print_hash(zval *values);
|
PHPAPI void mysqlnd_minfo_print_hash(zval *values);
|
||||||
#define mysqlnd_thread_safe() TRUE
|
#define mysqlnd_thread_safe() TRUE
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue