From: Andrey Hristov Date: Mon, 11 Jan 2010 12:37:42 +0000 (+0000) Subject: missed to commit to the branch X-Git-Tag: php-5.4.0alpha1~461 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4a549fbb3d0a1f88e3f2775b952de1130259454c;p=php missed to commit to the branch --- diff --git a/ext/mysqlnd/mysqlnd_statistics.c b/ext/mysqlnd/mysqlnd_statistics.c index 0d6d4b9d25..50eba8cfcd 100644 --- a/ext/mysqlnd/mysqlnd_statistics.c +++ b/ext/mysqlnd/mysqlnd_statistics.c @@ -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 diff --git a/ext/mysqlnd/mysqlnd_statistics.h b/ext/mysqlnd/mysqlnd_statistics.h index c2df51dc22..65891f54f1 100644 --- a/ext/mysqlnd/mysqlnd_statistics.h +++ b/ext/mysqlnd/mysqlnd_statistics.h @@ -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 */ diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h index c7bd51297e..963a87dfd3 100644 --- a/ext/mysqlnd/mysqlnd_structs.h +++ b/ext/mysqlnd/mysqlnd_structs.h @@ -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