]> granicus.if.org Git - php/commitdiff
missed to commit to the branch
authorAndrey Hristov <andrey@php.net>
Mon, 11 Jan 2010 12:37:42 +0000 (12:37 +0000)
committerAndrey Hristov <andrey@php.net>
Mon, 11 Jan 2010 12:37:42 +0000 (12:37 +0000)
ext/mysqlnd/mysqlnd_statistics.c
ext/mysqlnd/mysqlnd_statistics.h
ext/mysqlnd/mysqlnd_structs.h

index 0d6d4b9d2524f149280ce55c81f7689df1f15547..50eba8cfcdb1abaa0303d1c934b090675ec8b60d 100644 (file)
@@ -240,7 +240,8 @@ PHPAPI void
 mysqlnd_stats_init(MYSQLND_STATS ** stats)
 {
        *stats = calloc(1, sizeof(MYSQLND_STATS));
-       (*stats)->handlers = calloc(STAT_LAST, sizeof(mysqlnd_stat_handler));
+       (*stats)->triggers = calloc(STAT_LAST, sizeof(mysqlnd_stat_trigger));
+       (*stats)->in_trigger = FALSE;
 #ifdef ZTS
        (*stats)->LOCK_access = tsrm_mutex_alloc();
 #endif
@@ -256,13 +257,46 @@ mysqlnd_stats_end(MYSQLND_STATS * stats)
 #ifdef ZTS
        tsrm_mutex_free(stats->LOCK_access);
 #endif
-       free(stats->handlers);
+       free(stats->triggers);
        /* mnd_free will reference LOCK_access and crash...*/
        free(stats);
 }
 /* }}} */
 
 
+/* {{{ mysqlnd_stats_set_trigger */
+PHPAPI mysqlnd_stat_trigger
+mysqlnd_stats_set_trigger(MYSQLND_STATS * const stats, enum_mysqlnd_collected_stats stat, mysqlnd_stat_trigger trigger TSRMLS_DC)
+{
+       mysqlnd_stat_trigger ret = NULL;
+       DBG_ENTER("mysqlnd_stats_set_trigger");
+       if (stats) {
+               MYSQLND_STATS_LOCK(stats);
+               ret = stats->triggers[stat];
+               stats->triggers[stat] = trigger;
+               MYSQLND_STATS_UNLOCK(stats);
+       }
+       DBG_RETURN(ret);
+}
+/* }}} */
+
+
+/* {{{ mysqlnd_stats_set_handler */
+PHPAPI mysqlnd_stat_trigger
+mysqlnd_stats_reset_triggers(MYSQLND_STATS * const stats TSRMLS_DC)
+{
+       mysqlnd_stat_trigger ret = NULL;
+       DBG_ENTER("mysqlnd_stats_reset_trigger");
+       if (stats) {
+               MYSQLND_STATS_LOCK(stats);
+               memset(stats->triggers, 0, STAT_LAST * sizeof(mysqlnd_stat_trigger));
+               MYSQLND_STATS_UNLOCK(stats);
+       }
+       DBG_RETURN(ret);
+}
+/* }}} */
+
+
 /*
  * Local variables:
  * tab-width: 4
index c2df51dc22114bd05316a909e2c7894ac39657e5..65891f54f113a8eb22fa433df8f0ca95cc6e5cdb 100644 (file)
@@ -43,10 +43,10 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
 #endif
 
 #define MYSQLND_CHECK_AND_CALL_HANDLER(stats, statistic, value) \
-                       if ((stats)->handlers[(statistic)] && (stats)->in_handler == FALSE) { \
-                               (stats)->in_handler = TRUE; \
-                               (stats)->handlers[(statistic)]((stats), (statistic), (value) TSRMLS_CC); \
-                               (stats)->in_handler = FALSE; \
+                       if ((stats)->triggers[(statistic)] && (stats)->in_trigger == FALSE) { \
+                               (stats)->in_trigger = TRUE; \
+                               (stats)->triggers[(statistic)]((stats), (statistic), (value) TSRMLS_CC); \
+                               (stats)->in_trigger = FALSE; \
                        } \
 
 
@@ -223,6 +223,10 @@ void mysqlnd_fill_stats_hash(const MYSQLND_STATS * const stats, zval *return_val
 PHPAPI void mysqlnd_stats_init(MYSQLND_STATS ** stats);
 PHPAPI void mysqlnd_stats_end(MYSQLND_STATS * stats);
 
+PHPAPI mysqlnd_stat_trigger mysqlnd_stats_set_trigger(MYSQLND_STATS * const stats, enum_mysqlnd_collected_stats stat, mysqlnd_stat_trigger trigger TSRMLS_DC);
+PHPAPI mysqlnd_stat_trigger mysqlnd_stats_reset_triggers(MYSQLND_STATS * const stats TSRMLS_DC);
+
+
 #endif /* MYSQLND_STATISTICS_H */
 
 
index c7bd51297ea09dbef79cb9e361d92d8cc1018adf..963a87dfd30f71dd62b6eae9746264742a84b776 100644 (file)
@@ -210,13 +210,13 @@ typedef enum_func_status  (*mysqlnd_fetch_row_func)(MYSQLND_RES *result,
 
 typedef struct st_mysqlnd_stats MYSQLND_STATS;
 
-typedef void (*mysqlnd_stat_handler)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change TSRMLS_DC);
+typedef void (*mysqlnd_stat_trigger)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change TSRMLS_DC);
 
 struct st_mysqlnd_stats
 {
        uint64_t                                values[STAT_LAST];
-       mysqlnd_stat_handler    *handlers;
-       zend_bool                               in_handler;
+       mysqlnd_stat_trigger    *triggers;
+       zend_bool                               in_trigger;
 #ifdef ZTS
        MUTEX_T LOCK_access;
 #endif