diff options
Diffstat (limited to 'ext/mysqlnd/mysqlnd.c')
-rw-r--r-- | ext/mysqlnd/mysqlnd.c | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c index 078d2e6afa..6d313c161b 100644 --- a/ext/mysqlnd/mysqlnd.c +++ b/ext/mysqlnd/mysqlnd.c @@ -529,7 +529,6 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn, db = ""; db_len = 0; } - host_len = strlen(host); { char * transport = NULL; @@ -554,7 +553,7 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn, DBG_INF_FMT("transport=%s", transport); conn->scheme = mnd_pestrndup(transport, transport_len, conn->persistent); conn->scheme_len = transport_len; - efree(transport); /* allocated by spprintf */ + efree(transport); transport = NULL; } @@ -644,7 +643,6 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn, } } else { CONN_SET_STATE(conn, CONN_READY); - if (!self_alloced && saved_compression) { conn->net->compressed = TRUE; } @@ -664,14 +662,16 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn, conn->connect_or_select_db_len = db_len; if (!unix_socket) { + char *p; conn->host = mnd_pestrdup(host, conn->persistent); conn->host_len = strlen(conn->host); - { - char *p; - spprintf(&p, 0, "%s via TCP/IP", conn->host); - conn->host_info = mnd_pestrdup(p, conn->persistent); - efree(p); /* allocated by spprintf */ + spprintf(&p, 0, "%s via TCP/IP", conn->host); + if (conn->persistent) { + conn->host_info = mnd_pestrdup(p, 1); + mnd_efree(p); + } else { + conn->host_info = p; } } else { conn->unix_socket = mnd_pestrdup(socket, conn->persistent); @@ -693,6 +693,10 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn, SET_EMPTY_ERROR(conn->error_info); mysqlnd_local_infile_default(conn); + { + unsigned int buf_size = MYSQLND_G(net_cmd_buffer_size); /* this is long, cast to unsigned int*/ + conn->m->set_client_option(conn, MYSQLND_OPT_NET_CMD_BUFFER_SIZE, (char *)&buf_size TSRMLS_CC); + } MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn->stats, STAT_CONNECT_SUCCESS, 1, STAT_OPENED_CONNECTIONS, 1); if (reconnect) { @@ -703,7 +707,6 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn, } DBG_INF_FMT("connection_id=%llu", conn->thread_id); - #if PHP_MAJOR_VERSION >= 6 { unsigned int as_unicode = 1; @@ -712,6 +715,7 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn, DBG_INF("unicode set"); } #endif + if (conn->options.init_commands) { int current_command = 0; for (; current_command < conn->options.num_commands; ++current_command) { @@ -769,7 +773,7 @@ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn, unsigned int mysql_flags TSRMLS_DC) { - enum_func_status ret = FAIL; + enum_func_status ret; zend_bool self_alloced = FALSE; DBG_ENTER("mysqlnd_connect"); @@ -1135,7 +1139,7 @@ MYSQLND_METHOD(mysqlnd_conn, list_method)(MYSQLND *conn, const char *query, cons result = conn->m->store_result(conn TSRMLS_CC); } if (show_query != query) { - efree(show_query); /* allocated by spprintf */ + mnd_efree(show_query); } DBG_RETURN(result); } @@ -1221,7 +1225,7 @@ MYSQLND_METHOD(mysqlnd_conn, select_db)(MYSQLND * const conn, const char * const SET_ERROR_AFF_ROWS(conn); if (ret == PASS) { if (conn->connect_or_select_db) { - mnd_pefree(conn->connect_or_select_db, conn->persistent); + pefree(conn->connect_or_select_db, conn->persistent); } conn->connect_or_select_db = mnd_pestrndup(db, db_len, conn->persistent); conn->connect_or_select_db_len = db_len; @@ -1271,9 +1275,10 @@ MYSQLND_METHOD(mysqlnd_conn, stat)(MYSQLND *conn, char **message, unsigned int * if (FAIL == (ret = PACKET_READ(stats_header, conn))) { DBG_RETURN(FAIL); } - /* will be freed by Zend, thus don't use the mnd_ allocator */ - *message = estrndup(stats_header->message, stats_header->message_len); + *message = stats_header->message; *message_len = stats_header->message_len; + /* Ownership transfer */ + stats_header->message = NULL; PACKET_FREE(stats_header); DBG_INF(*message); @@ -1338,7 +1343,7 @@ MYSQLND_METHOD(mysqlnd_conn, set_charset)(MYSQLND * const conn, const char * con } else { conn->charset = charset; } - efree(query); /* allocated by spprintf */ + mnd_efree(query); DBG_INF(ret == PASS? "PASS":"FAIL"); DBG_RETURN(ret); |