Skip to content

Commit 99ea806

Browse files
committed
MFH:
- More statistics - Fixed endless loop - mysqlnd_stmt_next_result() returned FAIL but as it is defined to be 1 (and PASS is 0), checking for mysqlnd_stmt_more_result() was successful although we were expecting a FAIL.
1 parent 343d958 commit 99ea806

File tree

6 files changed

+337
-73
lines changed

6 files changed

+337
-73
lines changed

ext/mysqlnd/mysqlnd_debug.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ void * _mysqlnd_emalloc(size_t size MYSQLND_MEM_D)
683683
DBG_INF_FMT("size=%lu ptr=%p", size, ret);
684684

685685
if (MYSQLND_G(collect_memory_statistics)) {
686-
MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_EMALLOC_COUNT, 1, STAT_MEM_EMALLOC_AMMOUNT, size);
686+
MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_EMALLOC_COUNT, 1, STAT_MEM_EMALLOC_AMMOUNT, size);
687687
}
688688
DBG_RETURN(ret);
689689
}
@@ -710,7 +710,7 @@ void * _mysqlnd_pemalloc(size_t size, zend_bool persistent MYSQLND_MEM_D)
710710
if (MYSQLND_G(collect_memory_statistics)) {
711711
enum mysqlnd_collected_stats s1 = persistent? STAT_MEM_MALLOC_COUNT:STAT_MEM_EMALLOC_COUNT;
712712
enum mysqlnd_collected_stats s2 = persistent? STAT_MEM_MALLOC_AMMOUNT:STAT_MEM_EMALLOC_AMMOUNT;
713-
MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(s1, 1, s2, size);
713+
MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(s1, 1, s2, size);
714714
}
715715

716716
DBG_RETURN(ret);
@@ -736,7 +736,7 @@ void * _mysqlnd_ecalloc(uint nmemb, size_t size MYSQLND_MEM_D)
736736
DBG_INF_FMT("after : %lu", zend_memory_usage(FALSE TSRMLS_CC));
737737
DBG_INF_FMT("size=%lu ptr=%p", size, ret);
738738
if (MYSQLND_G(collect_memory_statistics)) {
739-
MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_ECALLOC_COUNT, 1, STAT_MEM_ECALLOC_AMMOUNT, size);
739+
MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_ECALLOC_COUNT, 1, STAT_MEM_ECALLOC_AMMOUNT, size);
740740
}
741741
DBG_RETURN(ret);
742742
}
@@ -763,7 +763,7 @@ void * _mysqlnd_pecalloc(uint nmemb, size_t size, zend_bool persistent MYSQLND_M
763763
if (MYSQLND_G(collect_memory_statistics)) {
764764
enum mysqlnd_collected_stats s1 = persistent? STAT_MEM_CALLOC_COUNT:STAT_MEM_ECALLOC_COUNT;
765765
enum mysqlnd_collected_stats s2 = persistent? STAT_MEM_CALLOC_AMMOUNT:STAT_MEM_ECALLOC_AMMOUNT;
766-
MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(s1, 1, s2, size);
766+
MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(s1, 1, s2, size);
767767
}
768768

769769
DBG_RETURN(ret);
@@ -790,7 +790,7 @@ void * _mysqlnd_erealloc(void *ptr, size_t new_size MYSQLND_MEM_D)
790790
DBG_INF_FMT("after : %lu", zend_memory_usage(FALSE TSRMLS_CC));
791791
DBG_INF_FMT("new_ptr=%p", ret);
792792
if (MYSQLND_G(collect_memory_statistics)) {
793-
MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_EREALLOC_COUNT, 1, STAT_MEM_EREALLOC_AMMOUNT, new_size);
793+
MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_EREALLOC_COUNT, 1, STAT_MEM_EREALLOC_AMMOUNT, new_size);
794794
}
795795
DBG_RETURN(ret);
796796
}
@@ -819,7 +819,7 @@ void * _mysqlnd_perealloc(void *ptr, size_t new_size, zend_bool persistent MYSQL
819819
if (MYSQLND_G(collect_memory_statistics)) {
820820
enum mysqlnd_collected_stats s1 = persistent? STAT_MEM_REALLOC_COUNT:STAT_MEM_EREALLOC_COUNT;
821821
enum mysqlnd_collected_stats s2 = persistent? STAT_MEM_REALLOC_AMMOUNT:STAT_MEM_EREALLOC_AMMOUNT;
822-
MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(s1, 1, s2, new_size);
822+
MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(s1, 1, s2, new_size);
823823
}
824824
DBG_RETURN(ret);
825825
}
@@ -881,7 +881,7 @@ void * _mysqlnd_malloc(size_t size MYSQLND_MEM_D)
881881

882882
DBG_INF_FMT("size=%lu ptr=%p", size, ret);
883883
if (MYSQLND_G(collect_memory_statistics)) {
884-
MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_MALLOC_COUNT, 1, STAT_MEM_MALLOC_AMMOUNT, size);
884+
MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_MALLOC_COUNT, 1, STAT_MEM_MALLOC_AMMOUNT, size);
885885
}
886886
DBG_RETURN(ret);
887887
}
@@ -899,7 +899,7 @@ void * _mysqlnd_calloc(uint nmemb, size_t size MYSQLND_MEM_D)
899899

900900
DBG_INF_FMT("size=%lu ptr=%p", size, ret);
901901
if (MYSQLND_G(collect_memory_statistics)) {
902-
MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_CALLOC_COUNT, 1, STAT_MEM_CALLOC_AMMOUNT, size);
902+
MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_CALLOC_COUNT, 1, STAT_MEM_CALLOC_AMMOUNT, size);
903903
}
904904
DBG_RETURN(ret);
905905
}
@@ -920,7 +920,7 @@ void * _mysqlnd_realloc(void *ptr, size_t new_size MYSQLND_MEM_D)
920920
DBG_INF_FMT("new_ptr=%p", ret);
921921

922922
if (MYSQLND_G(collect_memory_statistics)) {
923-
MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_REALLOC_COUNT, 1, STAT_MEM_REALLOC_AMMOUNT, new_size);
923+
MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_REALLOC_COUNT, 1, STAT_MEM_REALLOC_AMMOUNT, new_size);
924924
}
925925
DBG_RETURN(ret);
926926
}

ext/mysqlnd/mysqlnd_enum_n_def.h

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ typedef enum mysqlnd_connection_close_type
303303
MYSQLND_CLOSE_LAST /* for checking, should always be last */
304304
} enum_connection_close_type;
305305

306+
306307
typedef enum mysqlnd_collected_stats
307308
{
308309
STAT_BYTES_SENT,
@@ -311,6 +312,21 @@ typedef enum mysqlnd_collected_stats
311312
STAT_PACKETS_RECEIVED,
312313
STAT_PROTOCOL_OVERHEAD_IN,
313314
STAT_PROTOCOL_OVERHEAD_OUT,
315+
STAT_BYTES_RECEIVED_OK,
316+
STAT_BYTES_RECEIVED_EOF,
317+
STAT_BYTES_RECEIVED_RSET_HEADER,
318+
STAT_BYTES_RECEIVED_RSET_FIELD_META,
319+
STAT_BYTES_RECEIVED_RSET_ROW,
320+
STAT_BYTES_RECEIVED_PREPARE_RESPONSE,
321+
STAT_BYTES_RECEIVED_CHANGE_USER,
322+
STAT_PACKETS_SENT_CMD,
323+
STAT_PACKETS_RECEIVED_OK,
324+
STAT_PACKETS_RECEIVED_EOF,
325+
STAT_PACKETS_RECEIVED_RSET_HEADER,
326+
STAT_PACKETS_RECEIVED_RSET_FIELD_META,
327+
STAT_PACKETS_RECEIVED_RSET_ROW,
328+
STAT_PACKETS_RECEIVED_PREPARE_RESPONSE,
329+
STAT_PACKETS_RECEIVED_CHANGE_USER,
314330
STAT_RSET_QUERY,
315331
STAT_NON_RSET_QUERY,
316332
STAT_NO_INDEX_USED,
@@ -367,6 +383,48 @@ typedef enum mysqlnd_collected_stats
367383
STAT_MEM_REALLOC_COUNT,
368384
STAT_MEM_REALLOC_AMMOUNT,
369385
STAT_MEM_FREE_COUNT,
386+
STAT_TEXT_TYPE_FETCHED_NULL,
387+
STAT_TEXT_TYPE_FETCHED_BIT,
388+
STAT_TEXT_TYPE_FETCHED_INT8,
389+
STAT_TEXT_TYPE_FETCHED_INT16,
390+
STAT_TEXT_TYPE_FETCHED_INT24,
391+
STAT_TEXT_TYPE_FETCHED_INT32,
392+
STAT_TEXT_TYPE_FETCHED_INT64,
393+
STAT_TEXT_TYPE_FETCHED_DECIMAL,
394+
STAT_TEXT_TYPE_FETCHED_FLOAT,
395+
STAT_TEXT_TYPE_FETCHED_DOUBLE,
396+
STAT_TEXT_TYPE_FETCHED_DATE,
397+
STAT_TEXT_TYPE_FETCHED_YEAR,
398+
STAT_TEXT_TYPE_FETCHED_TIME,
399+
STAT_TEXT_TYPE_FETCHED_DATETIME,
400+
STAT_TEXT_TYPE_FETCHED_TIMESTAMP,
401+
STAT_TEXT_TYPE_FETCHED_STRING,
402+
STAT_TEXT_TYPE_FETCHED_BLOB,
403+
STAT_TEXT_TYPE_FETCHED_ENUM,
404+
STAT_TEXT_TYPE_FETCHED_SET,
405+
STAT_TEXT_TYPE_FETCHED_GEOMETRY,
406+
STAT_TEXT_TYPE_FETCHED_OTHER,
407+
STAT_BINARY_TYPE_FETCHED_NULL,
408+
STAT_BINARY_TYPE_FETCHED_BIT,
409+
STAT_BINARY_TYPE_FETCHED_INT8,
410+
STAT_BINARY_TYPE_FETCHED_INT16,
411+
STAT_BINARY_TYPE_FETCHED_INT24,
412+
STAT_BINARY_TYPE_FETCHED_INT32,
413+
STAT_BINARY_TYPE_FETCHED_INT64,
414+
STAT_BINARY_TYPE_FETCHED_DECIMAL,
415+
STAT_BINARY_TYPE_FETCHED_FLOAT,
416+
STAT_BINARY_TYPE_FETCHED_DOUBLE,
417+
STAT_BINARY_TYPE_FETCHED_DATE,
418+
STAT_BINARY_TYPE_FETCHED_YEAR,
419+
STAT_BINARY_TYPE_FETCHED_TIME,
420+
STAT_BINARY_TYPE_FETCHED_DATETIME,
421+
STAT_BINARY_TYPE_FETCHED_TIMESTAMP,
422+
STAT_BINARY_TYPE_FETCHED_STRING,
423+
STAT_BINARY_TYPE_FETCHED_BLOB,
424+
STAT_BINARY_TYPE_FETCHED_ENUM,
425+
STAT_BINARY_TYPE_FETCHED_SET,
426+
STAT_BINARY_TYPE_FETCHED_GEOMETRY,
427+
STAT_BINARY_TYPE_FETCHED_OTHER,
370428
STAT_LAST /* Should be always the last */
371429
} enum_mysqlnd_collected_stats;
372430

ext/mysqlnd/mysqlnd_ps.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2009,7 +2009,7 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_stmt, net_close)(MYSQLND_STMT * const stmt, zend_
20092009
DBG_INF("skipping result");
20102010
stmt->result->m.skip_result(stmt->result TSRMLS_CC);
20112011
}
2012-
} while (mysqlnd_stmt_more_results(stmt) && mysqlnd_stmt_next_result(stmt));
2012+
} while (mysqlnd_stmt_more_results(stmt) && mysqlnd_stmt_next_result(stmt) == PASS);
20132013
/*
20142014
After this point we are allowed to free the result set,
20152015
as we have cleaned the line

ext/mysqlnd/mysqlnd_statistics.c

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
/* {{{ mysqlnd_stats_values_names
3232
*/
33+
3334
const MYSQLND_STRING mysqlnd_stats_values_names[STAT_LAST] =
3435
{
3536
{ STR_W_LEN("bytes_sent") },
@@ -38,6 +39,21 @@ const MYSQLND_STRING mysqlnd_stats_values_names[STAT_LAST] =
3839
{ STR_W_LEN("packets_received") },
3940
{ STR_W_LEN("protocol_overhead_in") },
4041
{ STR_W_LEN("protocol_overhead_out") },
42+
{ STR_W_LEN("bytes_received_ok_packet") },
43+
{ STR_W_LEN("bytes_received_eof_packet") },
44+
{ STR_W_LEN("bytes_received_rset_header_packet") },
45+
{ STR_W_LEN("bytes_received_rset_field_meta_packet") },
46+
{ STR_W_LEN("bytes_received_rset_row_packet") },
47+
{ STR_W_LEN("bytes_received_prepare_response_packet") },
48+
{ STR_W_LEN("bytes_received_change_user_packet") },
49+
{ STR_W_LEN("packets_sent_command") },
50+
{ STR_W_LEN("packets_received_ok") },
51+
{ STR_W_LEN("packets_received_eof") },
52+
{ STR_W_LEN("packets_received_rset_header") },
53+
{ STR_W_LEN("packets_received_rset_field_meta") },
54+
{ STR_W_LEN("packets_received_rset_row") },
55+
{ STR_W_LEN("packets_received_prepare_response") },
56+
{ STR_W_LEN("packets_received_change_user") },
4157
{ STR_W_LEN("result_set_queries") },
4258
{ STR_W_LEN("non_result_set_queries") },
4359
{ STR_W_LEN("no_index_used") },
@@ -93,7 +109,49 @@ const MYSQLND_STRING mysqlnd_stats_values_names[STAT_LAST] =
93109
{ STR_W_LEN("mem_calloc_ammount") },
94110
{ STR_W_LEN("mem_realloc_calloc") },
95111
{ STR_W_LEN("mem_realloc_ammount") },
96-
{ STR_W_LEN("mem_free_count") }
112+
{ STR_W_LEN("mem_free_count") },
113+
{ STR_W_LEN("proto_text_fetched_null") },
114+
{ STR_W_LEN("proto_text_fetched_bit") },
115+
{ STR_W_LEN("proto_text_fetched_tinyint") },
116+
{ STR_W_LEN("proto_text_fetched_short") },
117+
{ STR_W_LEN("proto_text_fetched_int24") },
118+
{ STR_W_LEN("proto_text_fetched_int") },
119+
{ STR_W_LEN("proto_text_fetched_bigint") },
120+
{ STR_W_LEN("proto_text_fetched_decimal") },
121+
{ STR_W_LEN("proto_text_fetched_float") },
122+
{ STR_W_LEN("proto_text_fetched_double") },
123+
{ STR_W_LEN("proto_text_fetched_date") },
124+
{ STR_W_LEN("proto_text_fetched_year") },
125+
{ STR_W_LEN("proto_text_fetched_time") },
126+
{ STR_W_LEN("proto_text_fetched_datetime") },
127+
{ STR_W_LEN("proto_text_fetched_timestamp") },
128+
{ STR_W_LEN("proto_text_fetched_string") },
129+
{ STR_W_LEN("proto_text_fetched_blob") },
130+
{ STR_W_LEN("proto_text_fetched_enum") },
131+
{ STR_W_LEN("proto_text_fetched_set") },
132+
{ STR_W_LEN("proto_text_fetched_geometry") },
133+
{ STR_W_LEN("proto_text_fetched_other") },
134+
{ STR_W_LEN("proto_binary_fetched_null") },
135+
{ STR_W_LEN("proto_binary_fetched_bit") },
136+
{ STR_W_LEN("proto_binary_fetched_tinyint") },
137+
{ STR_W_LEN("proto_binary_fetched_short") },
138+
{ STR_W_LEN("proto_binary_fetched_int24") },
139+
{ STR_W_LEN("proto_binary_fetched_int") },
140+
{ STR_W_LEN("proto_binary_fetched_bigint") },
141+
{ STR_W_LEN("proto_binary_fetched_decimal") },
142+
{ STR_W_LEN("proto_binary_fetched_float") },
143+
{ STR_W_LEN("proto_binary_fetched_double") },
144+
{ STR_W_LEN("proto_binary_fetched_date") },
145+
{ STR_W_LEN("proto_binary_fetched_year") },
146+
{ STR_W_LEN("proto_binary_fetched_time") },
147+
{ STR_W_LEN("proto_binary_fetched_datetime") },
148+
{ STR_W_LEN("proto_binary_fetched_timestamp") },
149+
{ STR_W_LEN("proto_binary_fetched_string") },
150+
{ STR_W_LEN("proto_binary_fetched_blob") },
151+
{ STR_W_LEN("proto_binary_fetched_enum") },
152+
{ STR_W_LEN("proto_binary_fetched_set") },
153+
{ STR_W_LEN("proto_binary_fetched_geometry") },
154+
{ STR_W_LEN("proto_binary_fetched_other") }
97155
};
98156
/* }}} */
99157

0 commit comments

Comments
 (0)