@@ -42,24 +42,28 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
42
42
#define MYSQLND_STATS_UNLOCK (stats )
43
43
#endif
44
44
45
- #define MYSQLND_CHECK_AND_CALL_HANDLER (stats , statistic , value ) \
45
+ #define MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER (stats , statistic , value ) \
46
46
{ \
47
+ MYSQLND_STATS_LOCK(stats); \
48
+ (stats)->values[(statistic)] += (value); \
47
49
if ((stats)->triggers[(statistic)] && (stats)->in_trigger == FALSE) { \
48
50
(stats)->in_trigger = TRUE; \
51
+ MYSQLND_STATS_UNLOCK(stats); \
52
+ \
49
53
(stats)->triggers[(statistic)]((stats), (statistic), (value) TSRMLS_CC); \
54
+ \
55
+ MYSQLND_STATS_LOCK(stats); \
50
56
(stats)->in_trigger = FALSE; \
51
57
} \
58
+ MYSQLND_STATS_UNLOCK(_p_s); \
52
59
} \
53
60
54
61
#define MYSQLND_DEC_STATISTIC (enabler , stats , statistic ) \
55
62
{ \
56
63
enum_mysqlnd_collected_stats _s = (statistic);\
57
64
MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
58
65
if ((enabler) && _p_s && _s != _p_s->count) { \
59
- MYSQLND_STATS_LOCK(_p_s); \
60
- MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s, -1); \
61
- _p_s->values[_s]--; \
62
- MYSQLND_STATS_UNLOCK(_p_s); \
66
+ MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, -1); \
63
67
}\
64
68
}
65
69
@@ -68,10 +72,7 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
68
72
enum_mysqlnd_collected_stats _s = (statistic);\
69
73
MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
70
74
if ((enabler) && _p_s && _s != _p_s->count) { \
71
- MYSQLND_STATS_LOCK(_p_s); \
72
- MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s, 1); \
73
- _p_s->values[_s]++; \
74
- MYSQLND_STATS_UNLOCK(_p_s); \
75
+ MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, 1); \
75
76
}\
76
77
}
77
78
@@ -81,10 +82,7 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
81
82
MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
82
83
if ((enabler) && _p_s && _s != _p_s->count) { \
83
84
uint64_t v = (uint64_t) (value); \
84
- MYSQLND_STATS_LOCK(_p_s); \
85
- MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s, v); \
86
- _p_s->values[_s] += v; \
87
- MYSQLND_STATS_UNLOCK(_p_s); \
85
+ MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, v); \
88
86
}\
89
87
}
90
88
@@ -96,16 +94,8 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
96
94
uint64_t v2 = (uint64_t) (value2); \
97
95
enum_mysqlnd_collected_stats _s1 = (statistic1);\
98
96
enum_mysqlnd_collected_stats _s2 = (statistic2);\
99
- MYSQLND_STATS_LOCK(_p_s); \
100
- if (_s1 != _p_s->count) { \
101
- MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s1, v1); \
102
- _p_s->values[_s1]+= v1; \
103
- } \
104
- if (_s2 != _p_s->count) { \
105
- MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s2, v2); \
106
- _p_s->values[_s2]+= v2; \
107
- } \
108
- MYSQLND_STATS_UNLOCK(_p_s); \
97
+ if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
98
+ if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
109
99
}\
110
100
}
111
101
@@ -119,20 +109,9 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
119
109
enum_mysqlnd_collected_stats _s1 = (statistic1);\
120
110
enum_mysqlnd_collected_stats _s2 = (statistic2);\
121
111
enum_mysqlnd_collected_stats _s3 = (statistic3);\
122
- MYSQLND_STATS_LOCK(_p_s); \
123
- if (_s1 != _p_s->count) { \
124
- MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s1, v1); \
125
- _p_s->values[_s1]+= v1; \
126
- } \
127
- if (_s2 != _p_s->count) { \
128
- MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s2, v2); \
129
- _p_s->values[_s2]+= v2; \
130
- } \
131
- if (_s3 != _p_s->count) { \
132
- MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s3, v3); \
133
- _p_s->values[_s3]+= v3; \
134
- } \
135
- MYSQLND_STATS_UNLOCK(_p_s); \
112
+ if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
113
+ if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
114
+ if (_s3 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s3, v3); \
136
115
}\
137
116
}
138
117
0 commit comments