summaryrefslogtreecommitdiffstats
path: root/lib/hash.c
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2017-07-14 13:07:30 +0200
committerDavid Lamparter <equinox@opensourcerouting.org>2017-07-14 13:07:30 +0200
commit2d8270596a085e7a815cebaea21e17cba9e26111 (patch)
treef9a559f654e7d704ecacc9dadedbe01868615610 /lib/hash.c
parent*: remove VTYNL, part 6 of 6 (diff)
parentMerge pull request #815 from dwalton76/CMD_WARNING_take2 (diff)
downloadfrr-2d8270596a085e7a815cebaea21e17cba9e26111.tar.xz
frr-2d8270596a085e7a815cebaea21e17cba9e26111.zip
Merge remote-tracking branch 'frr/master' into newline-redux
Lots of conflicts from CMD_WARNING_CONFIG_FAILED... Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'lib/hash.c')
-rw-r--r--lib/hash.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/hash.c b/lib/hash.c
index 166bc7a26..47f336c1e 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -87,13 +87,8 @@ hash_alloc_intern (void *arg)
}
#define hash_update_ssq(hz, old, new) \
- do { \
- long double res; \
- res = powl(old, 2.0); \
- hz->stats.ssq -= (uint64_t) res;\
- res = powl(new, 2.0); \
- hz->stats.ssq += (uint64_t) res; \
- } while (0); \
+ atomic_fetch_add_explicit(&hz->stats.ssq, (new + old)*(new - old),\
+ memory_order_relaxed);
/* Expand hash if the chain length exceeds the threshold. */
static void hash_expand (struct hash *hash)
@@ -428,6 +423,13 @@ DEFUN(show_hash_stats,
long double ssq; // ssq casted to long double
pthread_mutex_lock (&_hashes_mtx);
+ if (!_hashes)
+ {
+ pthread_mutex_unlock (&_hashes_mtx);
+ vty_outln (vty, "No hash tables in use.");
+ return CMD_SUCCESS;
+ }
+
for (ALL_LIST_ELEMENTS_RO (_hashes, ln, h))
{
if (!h->name)
@@ -482,6 +484,5 @@ DEFUN(show_hash_stats,
void
hash_cmd_init ()
{
- _hashes = list_new();
install_element (ENABLE_NODE, &show_hash_stats_cmd);
}