diff options
-rw-r--r-- | ext/mysqlnd/mysqlnd_ps.c | 4 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_result.c | 8 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_wireprotocol.c | 5 |
3 files changed, 13 insertions, 4 deletions
diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c index 274924c2a3..38e19484da 100644 --- a/ext/mysqlnd/mysqlnd_ps.c +++ b/ext/mysqlnd/mysqlnd_ps.c @@ -886,7 +886,9 @@ mysqlnd_stmt_fetch_row_unbuffered(MYSQLND_RES * result, void * param, const unsi COPY_CLIENT_ERROR(stmt->error_info, row_packet->error_info); } } - SET_CONNECTION_STATE(&conn->state, CONN_READY); + if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) { + SET_CONNECTION_STATE(&conn->state, CONN_READY); + } result->unbuf->eof_reached = TRUE; /* so next time we won't get an error */ } else if (row_packet->eof) { DBG_INF("EOF"); diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index 08f458ec2b..28761aeb0a 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -741,7 +741,9 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, voi COPY_CLIENT_ERROR(conn->error_info, row_packet->error_info); DBG_ERR_FMT("errorno=%u error=%s", row_packet->error_info.error_no, row_packet->error_info.error); } - SET_CONNECTION_STATE(&conn->state, CONN_READY); + if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) { + SET_CONNECTION_STATE(&conn->state, CONN_READY); + } result->unbuf->eof_reached = TRUE; /* so next time we won't get an error */ } else if (row_packet->eof) { /* Mark the connection as usable again */ @@ -879,7 +881,9 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void COPY_CLIENT_ERROR(conn->error_info, row_packet->error_info); DBG_ERR_FMT("errorno=%u error=%s", row_packet->error_info.error_no, row_packet->error_info.error); } - SET_CONNECTION_STATE(&conn->state, CONN_READY); + if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) { + SET_CONNECTION_STATE(&conn->state, CONN_READY); + } result->unbuf->eof_reached = TRUE; /* so next time we won't get an error */ } else if (row_packet->eof) { /* Mark the connection as usable again */ diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index 44bf2d9c40..5bd90e86dd 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -1367,6 +1367,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) @@ -1402,6 +1403,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) { @@ -1431,6 +1433,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; } @@ -1733,7 +1736,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; |