summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd_wireprotocol.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-10-29 10:17:35 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-10-29 10:36:03 +0100
commit24537a73c010d5ce56d83cae36c15b9c8d1a1a13 (patch)
tree3471c4f1bc9033d5a885cf2c20ad4d119ee830cc /ext/mysqlnd/mysqlnd_wireprotocol.c
parenta66d73db4b2e2fcf03b9ecbbc196440eefeb6641 (diff)
downloadphp-git-24537a73c010d5ce56d83cae36c15b9c8d1a1a13.tar.gz
Retain QUIT_SEND connection state
If the server goes away while reading a packet, don't go back into the READY state. This will just cause broken pipe errors down the line.
Diffstat (limited to 'ext/mysqlnd/mysqlnd_wireprotocol.c')
-rw-r--r--ext/mysqlnd/mysqlnd_wireprotocol.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c
index 786ba2a2e9..b9c8079421 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.c
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.c
@@ -1370,6 +1370,7 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc,
MYSQLND_VIO * vio,
MYSQLND_STATS * stats,
MYSQLND_ERROR_INFO * error_info,
+ MYSQLND_CONNECTION_STATE * connection_state,
MYSQLND_MEMORY_POOL * pool,
MYSQLND_ROW_BUFFER * buffer,
size_t * const data_size)
@@ -1405,6 +1406,7 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc,
if (UNEXPECTED(PASS != (ret = pfc->data->m.receive(pfc, vio, p, header.size, stats, error_info)))) {
DBG_ERR("Empty row packet body");
+ SET_CONNECTION_STATE(connection_state, CONN_QUIT_SENT);
set_packet_error(error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
} else {
while (header.size >= MYSQLND_MAX_PACKET_SIZE) {
@@ -1434,6 +1436,7 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc,
if (PASS != (ret = pfc->data->m.receive(pfc, vio, p, header.size, stats, error_info))) {
DBG_ERR("Empty row packet body");
+ SET_CONNECTION_STATE(connection_state, CONN_QUIT_SENT);
set_packet_error(error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
break;
}
@@ -1740,7 +1743,7 @@ php_mysqlnd_rowp_read(MYSQLND_CONN_DATA * conn, void * _packet)
DBG_ENTER("php_mysqlnd_rowp_read");
- ret = php_mysqlnd_read_row_ex(pfc, vio, stats, error_info,
+ ret = php_mysqlnd_read_row_ex(pfc, vio, stats, error_info, &conn->state,
packet->result_set_memory_pool, &packet->row_buffer, &data_size);
if (FAIL == ret) {
goto end;