summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd_wireprotocol.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2017-11-02 10:40:45 +0800
committerXinchen Hui <laruence@gmail.com>2017-11-02 10:40:45 +0800
commit39845250f242b7739d30b4b8a287b4a6130d8fa1 (patch)
tree3f8f69284a99f7932989f2460e8d78d1757a34cf /ext/mysqlnd/mysqlnd_wireprotocol.c
parenta32e567ec8b28a7ccc0ebca9d24911788aaf853c (diff)
parenta7305eb539596e175bd6c3ae9a20953358c5d677 (diff)
downloadphp-git-39845250f242b7739d30b4b8a287b4a6130d8fa1.tar.gz
Merge branch 'master' of git.php.net:/php-src
* 'master' of git.php.net:/php-src: Made "result", "statement" and "last_message" to always use Zend MM heap. (even for persistent connections these entities don't relive request boundary) Fixed memory leaks Use interned strings for "magic" property of internal classes. (not copyied into SHM) Reverted incomplete fix and too strict asserts. Mark persistent connection related data as "thread-local". Persistent resources are "thread-local". Register persistent resources through new functions zend_register_persistent_resource()/zend_register_persistent_resource_ex(). PCRE cache is "thread-local" Allow reference-counting on "thread-local" persistent zvals
Diffstat (limited to 'ext/mysqlnd/mysqlnd_wireprotocol.c')
-rw-r--r--ext/mysqlnd/mysqlnd_wireprotocol.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c
index ed6931ef41..9c92ec5e36 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.c
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.c
@@ -1354,8 +1354,8 @@ php_mysqlnd_rset_field_read(void * _packet)
len != MYSQLND_NULL_LENGTH)
{
BAIL_IF_NO_MORE_DATA;
- DBG_INF_FMT("Def found, length %lu, persistent=%u", len, packet->persistent_alloc);
- meta->def = mnd_pemalloc(len + 1, packet->persistent_alloc);
+ DBG_INF_FMT("Def found, length %lu", len);
+ meta->def = mnd_emalloc(len + 1);
if (!meta->def) {
SET_OOM_ERROR(error_info);
DBG_RETURN(FAIL);
@@ -1366,7 +1366,7 @@ php_mysqlnd_rset_field_read(void * _packet)
p += len;
}
- root_ptr = meta->root = mnd_pemalloc(total_len, packet->persistent_alloc);
+ root_ptr = meta->root = mnd_emalloc(total_len);
if (!root_ptr) {
SET_OOM_ERROR(error_info);
DBG_RETURN(FAIL);
@@ -1375,7 +1375,7 @@ php_mysqlnd_rset_field_read(void * _packet)
meta->root_len = total_len;
if (meta->name != mysqlnd_empty_string) {
- meta->sname = zend_string_init_interned(meta->name, meta->name_length, packet->persistent_alloc);
+ meta->sname = zend_string_init_interned(meta->name, meta->name_length, 0);
} else {
meta->sname = ZSTR_EMPTY_ALLOC();
}
@@ -1418,7 +1418,7 @@ php_mysqlnd_rset_field_read(void * _packet)
root_ptr++;
}
- DBG_INF_FMT("allocing root. persistent=%u", packet->persistent_alloc);
+ DBG_INF_FMT("allocing root.");
DBG_INF_FMT("FIELD=[%s.%s.%s]", meta->db? meta->db:"*NA*", meta->table? meta->table:"*NA*",
meta->name? meta->name:"*NA*");
@@ -1460,7 +1460,7 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc,
MYSQLND_ERROR_INFO * error_info,
MYSQLND_MEMORY_POOL * pool,
MYSQLND_MEMORY_POOL_CHUNK ** buffer,
- size_t * data_size, zend_bool persistent_alloc)
+ size_t * data_size)
{
enum_func_status ret = PASS;
MYSQLND_PACKET_HEADER header;
@@ -1830,8 +1830,7 @@ php_mysqlnd_rowp_read(void * _packet)
DBG_ENTER("php_mysqlnd_rowp_read");
ret = php_mysqlnd_read_row_ex(pfc, vio, stats, error_info,
- packet->result_set_memory_pool, &packet->row_buffer, &data_size,
- packet->persistent_alloc);
+ packet->result_set_memory_pool, &packet->row_buffer, &data_size);
if (FAIL == ret) {
goto end;
}
@@ -1896,8 +1895,7 @@ php_mysqlnd_rowp_read(void * _packet)
but mostly like old-API unbuffered and thus will populate this array with
value.
*/
- packet->fields = mnd_pecalloc(packet->field_count, sizeof(zval),
- packet->persistent_alloc);
+ packet->fields = mnd_ecalloc(packet->field_count, sizeof(zval));
}
} else {
MYSQLND_INC_CONN_STATISTIC(stats,
@@ -2796,8 +2794,7 @@ MYSQLND_METHOD(mysqlnd_protocol, send_command_handle_OK)(
MYSQLND_ERROR_INFO * const error_info,
MYSQLND_UPSERT_STATUS * const upsert_status,
const zend_bool ignore_upsert_status, /* actually used only by LOAD DATA. COM_QUERY and COM_EXECUTE handle the responses themselves */
- MYSQLND_STRING * const last_message,
- const zend_bool last_message_persistent)
+ MYSQLND_STRING * const last_message)
{
enum_func_status ret = FAIL;
MYSQLND_PACKET_OK * ok_response = payload_decoder_factory->m.get_ok_packet(payload_decoder_factory, FALSE);
@@ -2830,8 +2827,7 @@ MYSQLND_METHOD(mysqlnd_protocol, send_command_handle_OK)(
UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR(upsert_status);
} else {
SET_NEW_MESSAGE(last_message->s, last_message->l,
- ok_response->message, ok_response->message_len,
- last_message_persistent);
+ ok_response->message, ok_response->message_len);
if (!ignore_upsert_status) {
UPSERT_STATUS_RESET(upsert_status);
UPSERT_STATUS_SET_WARNINGS(upsert_status, ok_response->warning_count);
@@ -2902,8 +2898,7 @@ MYSQLND_METHOD(mysqlnd_protocol, send_command_handle_response)(
MYSQLND_ERROR_INFO * error_info,
MYSQLND_UPSERT_STATUS * upsert_status,
- MYSQLND_STRING * last_message,
- zend_bool last_message_persistent
+ MYSQLND_STRING * last_message
)
{
enum_func_status ret = FAIL;
@@ -2913,7 +2908,7 @@ MYSQLND_METHOD(mysqlnd_protocol, send_command_handle_response)(
switch (ok_packet) {
case PROT_OK_PACKET:
- ret = payload_decoder_factory->m.send_command_handle_OK(payload_decoder_factory, error_info, upsert_status, ignore_upsert_status, last_message, last_message_persistent);
+ ret = payload_decoder_factory->m.send_command_handle_OK(payload_decoder_factory, error_info, upsert_status, ignore_upsert_status, last_message);
break;
case PROT_EOF_PACKET:
ret = payload_decoder_factory->m.send_command_handle_EOF(payload_decoder_factory, error_info, upsert_status);