summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2011-11-02 15:08:01 +0000
committerAndrey Hristov <andrey@php.net>2011-11-02 15:08:01 +0000
commit2627fafcbdd81d9ec88e891cd6077ab42080352d (patch)
tree920ad6705730e61b4a54206973c3120571f5211f
parent77477945b3e0bbc652a1258c45b0ad10cd9d8f18 (diff)
downloadphp-git-2627fafcbdd81d9ec88e891cd6077ab42080352d.tar.gz
- shift a bit of code around
- when cloning use the methods of the original object
-rw-r--r--ext/mysqlnd/mysqlnd.c26
-rw-r--r--ext/mysqlnd/mysqlnd_driver.c2
2 files changed, 14 insertions, 14 deletions
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c
index 912a3bc2f5..b145482e31 100644
--- a/ext/mysqlnd/mysqlnd.c
+++ b/ext/mysqlnd/mysqlnd.c
@@ -1698,6 +1698,12 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_close)(MYSQLND_CONN_DATA * const conn TSR
DBG_INF_FMT("conn=%llu conn->net->stream->abstract=%p",
conn->thread_id, conn->net->stream? conn->net->stream->abstract:NULL);
+ if (CONN_GET_STATE(conn) >= CONN_READY) {
+ MYSQLND_DEC_CONN_STATISTIC(conn->stats, STAT_OPENED_CONNECTIONS);
+ if (conn->persistent) {
+ MYSQLND_DEC_CONN_STATISTIC(conn->stats, STAT_OPENED_PERSISTENT_CONNECTIONS);
+ }
+ }
switch (CONN_GET_STATE(conn)) {
case CONN_READY:
DBG_INF("Connection clean, sending COM_QUIT");
@@ -2652,24 +2658,18 @@ MYSQLND_METHOD(mysqlnd_conn, close)(MYSQLND * conn_handle, enum_connection_close
size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, close);
MYSQLND_CONN_DATA * conn = conn_handle->data;
enum_func_status ret = FAIL;
- static enum_mysqlnd_collected_stats
- close_type_to_stat_map[MYSQLND_CLOSE_LAST] = {
- STAT_CLOSE_EXPLICIT,
- STAT_CLOSE_IMPLICIT,
- STAT_CLOSE_DISCONNECT
- };
- enum_mysqlnd_collected_stats statistic = close_type_to_stat_map[close_type];
DBG_ENTER("mysqlnd_conn::close");
DBG_INF_FMT("conn=%llu", conn->thread_id);
if (PASS == conn->m->local_tx_start(conn, this_func TSRMLS_CC)) {
if (CONN_GET_STATE(conn) >= CONN_READY) {
- MYSQLND_INC_CONN_STATISTIC(conn->stats, statistic);
- MYSQLND_DEC_CONN_STATISTIC(conn->stats, STAT_OPENED_CONNECTIONS);
- if (conn->persistent) {
- MYSQLND_DEC_CONN_STATISTIC(conn->stats, STAT_OPENED_PERSISTENT_CONNECTIONS);
- }
+ static enum_mysqlnd_collected_stats close_type_to_stat_map[MYSQLND_CLOSE_LAST] = {
+ STAT_CLOSE_EXPLICIT,
+ STAT_CLOSE_IMPLICIT,
+ STAT_CLOSE_DISCONNECT
+ };
+ MYSQLND_INC_CONN_STATISTIC(conn->stats, close_type_to_stat_map[close_type]);
}
/*
@@ -2678,7 +2678,7 @@ MYSQLND_METHOD(mysqlnd_conn, close)(MYSQLND * conn_handle, enum_connection_close
*/
ret = conn->m->send_close(conn TSRMLS_CC);
- /* do it after free_reference and we might crash */
+ /* do it after free_reference/dtor and we might crash */
conn->m->local_tx_end(conn, this_func, ret TSRMLS_CC);
conn_handle->m->dtor(conn_handle TSRMLS_CC);
diff --git a/ext/mysqlnd/mysqlnd_driver.c b/ext/mysqlnd/mysqlnd_driver.c
index 3a61621ac5..26fe084ddd 100644
--- a/ext/mysqlnd/mysqlnd_driver.c
+++ b/ext/mysqlnd/mysqlnd_driver.c
@@ -174,7 +174,7 @@ MYSQLND_METHOD(mysqlnd_object_factory, clone_connection_object)(MYSQLND * to_be_
DBG_RETURN(NULL);
}
new_object->persistent = to_be_cloned->persistent;
- new_object->m = mysqlnd_conn_get_methods();
+ new_object->m = to_be_cloned->m;
new_object->data = to_be_cloned->data->m->get_reference(to_be_cloned->data TSRMLS_CC);
if (!new_object->data) {