mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Fix possible bug with persistent connections and mysqlnd
This commit is contained in:
parent
048736a907
commit
e0f45cf7ae
4 changed files with 22 additions and 9 deletions
|
@ -791,7 +791,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
|
|||
}
|
||||
} else {
|
||||
#ifdef MYSQL_USE_MYSQLND
|
||||
mysqlnd_restart_psession(mysql->conn);
|
||||
mysqlnd_restart_psession(mysql->conn, MySG(mysqlnd_thd_zval_cache));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -170,7 +170,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
|
|||
if (!mysql_ping(mysql->mysql)) {
|
||||
#endif
|
||||
#ifdef MYSQLI_USE_MYSQLND
|
||||
mysqlnd_restart_psession(mysql->mysql);
|
||||
mysqlnd_restart_psession(mysql->mysql, MyG(mysqlnd_thd_zval_cache));
|
||||
#endif
|
||||
MyG(num_active_persistent)++;
|
||||
goto end;
|
||||
|
|
|
@ -442,7 +442,7 @@ MYSQLND_METHOD(mysqlnd_conn, set_server_option)(MYSQLND * const conn,
|
|||
|
||||
|
||||
/* {{{ _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");
|
||||
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);
|
||||
conn->last_message = NULL;
|
||||
}
|
||||
conn->zval_cache = cache;
|
||||
DBG_VOID_RETURN;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ mysqlnd_end_psession */
|
||||
PHPAPI void mysqlnd_end_psession(MYSQLND *conn)
|
||||
/* {{{ _mysqlnd_end_psession */
|
||||
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_end(TSRMLS_D);
|
||||
|
||||
#define mysqlnd_restart_psession(conn) _mysqlnd_restart_psession((conn) TSRMLS_CC)
|
||||
PHPAPI void _mysqlnd_restart_psession(MYSQLND *conn TSRMLS_DC);
|
||||
PHPAPI void mysqlnd_end_psession(MYSQLND *conn);
|
||||
#define mysqlnd_restart_psession(conn, cache) _mysqlnd_restart_psession((conn), (cache) TSRMLS_CC)
|
||||
PHPAPI void _mysqlnd_restart_psession(MYSQLND *conn, MYSQLND_THD_ZVAL_PCACHE *cache TSRMLS_DC);
|
||||
#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);
|
||||
#define mysqlnd_thread_safe() TRUE
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue