diff options
| author | Garrett D'Amore <garrett@damore.org> | 2020-11-08 23:10:21 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2020-11-08 23:10:21 -0800 |
| commit | bec9771439bbd1db6844a66ce076b4dd438ae610 (patch) | |
| tree | 15fae33f3935eb0135d8ccae36ba114ed32d5b9d /src | |
| parent | a06a4b45ef111908c1cb7138990ae36bd2c5d0c3 (diff) | |
| download | nng-bec9771439bbd1db6844a66ce076b4dd438ae610.tar.gz nng-bec9771439bbd1db6844a66ce076b4dd438ae610.tar.bz2 nng-bec9771439bbd1db6844a66ce076b4dd438ae610.zip | |
fixes #1329 stats could lose parent and private fields
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/stats.c | 58 | ||||
| -rw-r--r-- | src/core/stats.h | 9 |
2 files changed, 21 insertions, 46 deletions
diff --git a/src/core/stats.c b/src/core/stats.c index f9b56858..d6f98e3e 100644 --- a/src/core/stats.c +++ b/src/core/stats.c @@ -48,7 +48,6 @@ nni_stat_add(nni_stat_item *parent, nni_stat_item *child) NNI_LIST_INIT(&child->si_children, nni_stat_item, si_node); } nni_list_append(&parent->si_children, child); - child->si_parent = parent; #else NNI_ARG_UNUSED(parent); NNI_ARG_UNUSED(child); @@ -70,15 +69,11 @@ nni_stat_register(nni_stat_item *child) } void -nni_stat_unregister(nni_stat_item *child) +nni_stat_unregister(nni_stat_item *stat) { #ifdef NNG_ENABLE_STATS - nni_stat_item *parent; nni_mtx_lock(&stats_lock); - if ((parent = child->si_parent) != NULL) { - nni_list_remove(&parent->si_children, child); - child->si_parent = NULL; - } + nni_list_node_remove(&stat->si_node); nni_mtx_unlock(&stats_lock); #else NNI_ARG_UNUSED(child); @@ -90,16 +85,14 @@ void nni_stat_init(nni_stat_item *stat, const char *name, const char *desc) { NNI_LIST_INIT(&stat->si_children, nni_stat_item, si_node); - stat->si_parent = NULL; - stat->si_name = name; - stat->si_desc = desc; - stat->si_lock = NULL; - stat->si_update = NULL; - stat->si_private = NULL; - stat->si_string = NULL; - stat->si_number = 0; - stat->si_type = NNG_STAT_COUNTER; - stat->si_unit = NNG_UNIT_NONE; + stat->si_name = name; + stat->si_desc = desc; + stat->si_lock = NULL; + stat->si_update = NULL; + stat->si_string = NULL; + stat->si_number = 0; + stat->si_type = NNG_STAT_COUNTER; + stat->si_unit = NNG_UNIT_NONE; } void @@ -141,9 +134,8 @@ nni_stat_init_bool( } static void -stat_atomic_update(nni_stat_item *stat, void *notused) +stat_atomic_update(nni_stat_item *stat) { - NNI_ARG_UNUSED(notused); stat->si_number = nni_atomic_get64(&stat->si_atomic); } @@ -151,9 +143,8 @@ void nni_stat_init_atomic(nni_stat_item *stat, const char *name, const char *desc) { nni_stat_init(stat, name, desc); - stat->si_number = 0; - stat->si_private = NULL; - stat->si_update = stat_atomic_update; + stat->si_number = 0; + stat->si_update = stat_atomic_update; nni_atomic_init64(&stat->si_atomic); } @@ -192,19 +183,6 @@ nni_stat_set_lock(nni_stat_item *stat, nni_mtx *mtx) #endif } -void -nni_stat_set_update(nni_stat_item *stat, nni_stat_update f, void *a) -{ -#ifdef NNG_ENABLE_STATS - stat->si_update = f; - stat->si_private = a; -#else - NNI_ARG_UNUSED(stat); - NNI_ARG_UNUSED(f); - NNI_ARG_UNUSED(a); -#endif -} - #ifdef NNG_ENABLE_STATS void nni_stat_set_type(nni_stat_item *stat, int type) @@ -295,7 +273,7 @@ stat_update(nni_stat *stat) } } if (item->si_update != NULL) { - item->si_update(item, item->si_private); + item->si_update(item); } stat->s_value = item->si_number; stat->s_time = nni_clock(); @@ -424,7 +402,7 @@ nng_stat_find(nng_stat *stat, const char *name) if (strcmp(name, stat->s_name) == 0) { return (stat); } - NNI_LIST_FOREACH(&stat->s_children, child) { + NNI_LIST_FOREACH (&stat->s_children, child) { nng_stat *result; if ((result = nng_stat_find(child, name)) != NULL) { return (result); @@ -437,7 +415,7 @@ nng_stat * nng_stat_find_socket(nng_stat *stat, nng_socket s) { char name[16]; - (void) snprintf(name, sizeof (name), "socket%d", nng_socket_id(s)); + (void) snprintf(name, sizeof(name), "socket%d", nng_socket_id(s)); return (nng_stat_find(stat, name)); } @@ -445,7 +423,7 @@ nng_stat * nng_stat_find_dialer(nng_stat *stat, nng_dialer d) { char name[16]; - (void) snprintf(name, sizeof (name), "dialer%d", nng_dialer_id(d)); + (void) snprintf(name, sizeof(name), "dialer%d", nng_dialer_id(d)); return (nng_stat_find(stat, name)); } @@ -453,7 +431,7 @@ nng_stat * nng_stat_find_listener(nng_stat *stat, nng_listener l) { char name[16]; - (void) snprintf(name, sizeof (name), "listener%d", nng_listener_id(l)); + (void) snprintf(name, sizeof(name), "listener%d", nng_listener_id(l)); return (nng_stat_find(stat, name)); } diff --git a/src/core/stats.h b/src/core/stats.h index a9ea6e13..0375979e 100644 --- a/src/core/stats.h +++ b/src/core/stats.h @@ -1,5 +1,5 @@ // -// Copyright 2019 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a @@ -25,7 +25,7 @@ typedef struct nni_stat_item nni_stat_item; -typedef void (*nni_stat_update)(nni_stat_item *, void *); +typedef void (*nni_stat_update)(nni_stat_item *); typedef enum nng_stat_type_enum nni_stat_type; typedef enum nng_unit_enum nni_stat_unit; @@ -37,12 +37,10 @@ typedef enum nng_unit_enum nni_stat_unit; struct nni_stat_item { #ifdef NNG_ENABLE_STATS nni_list_node si_node; // list node, framework use only - nni_stat_item * si_parent; // link back to parent, framework use only nni_list si_children; // children, framework use only const char * si_name; // name of statistic const char * si_desc; // description of statistic (English) nni_mtx * si_lock; // lock for accessing, can be NULL - void * si_private; // provider private pointer nni_stat_type si_type; // type of stat, e.g. NNG_STAT_LEVEL nni_stat_unit si_unit; // units, e.g. NNG_UNIT_MILLIS nni_stat_update si_update; // update function (can be NULL) @@ -50,7 +48,7 @@ struct nni_stat_item { uint64_t si_number; // numeric value nni_atomic_u64 si_atomic; // atomic value #else - char si_disabled; // place holder, cannot be empty in C + char si_disabled; // place holder, cannot be empty in C #endif }; @@ -67,7 +65,6 @@ void nni_stat_unregister(nni_stat_item *); void nni_stat_set_value(nni_stat_item *, uint64_t); void nni_stat_set_lock(nni_stat_item *, nni_mtx *); -void nni_stat_set_update(nni_stat_item *, nni_stat_update, void *); #ifdef NNG_ENABLE_STATS void nni_stat_init(nni_stat_item *, const char *, const char *); |
