]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Avoid an extra atomic_load() call
authorOndřej Surý <ondrej@sury.org>
Wed, 6 Nov 2019 09:49:28 +0000 (10:49 +0100)
committerOndřej Surý <ondrej@sury.org>
Wed, 6 Nov 2019 11:54:40 +0000 (12:54 +0100)
lib/isc/stats.c

index a03daf6a3b22ab9de7236246d6eeecb44916fdee..d5ec9c2dabaf42e2e8ae93385aececdb424f4ad0 100644 (file)
@@ -485,15 +485,12 @@ void isc_stats_update_if_greater(isc_stats_t *stats,
        }
 #elif ISC_STATS_HAVEATOMICQ
 #if defined(ISC_STATS_HAVESTDATOMICQ)
-       isc_statscounter_t curr_value;
-
+       uint64_t curr_value = atomic_load_explicit(&stats->counters[counter],
+                                                  memory_order_relaxed);
        do {
-               curr_value = atomic_load_explicit(&stats->counters[counter],
-                                                 memory_order_relaxed);
                if (curr_value >= value) {
                        break;
                }
-
        } while (!atomic_compare_exchange_strong(&stats->counters[counter],
                                                 (int64_t *)&curr_value,
                                                 value));
@@ -505,6 +502,7 @@ void isc_stats_update_if_greater(isc_stats_t *stats,
                stats->counters[counter] = value;
        }
 #endif
+#endif
 
 #if ISC_STATS_LOCKCOUNTERS
        isc_rwlock_unlock(&stats->counterlock, isc_rwlocktype_write);
@@ -530,13 +528,13 @@ isc_stats_get_counter(isc_stats_t *stats, isc_statscounter_t counter)
 #if defined(ISC_STATS_HAVESTDATOMICQ)
        curr_value = atomic_load_explicit(&stats->counters[counter],
                                          memory_order_relaxed);
-#else
 #else
        /* use xaddq(..., 0) as an atomic load */
        curr_value =
                (uint64_t)isc_atomic_xaddq((int64_t *)&stats->counters[counter],
                                           0);
 #endif
+#endif
 
 #if ISC_STATS_LOCKCOUNTERS
        isc_rwlock_unlock(&stats->counterlock, isc_rwlocktype_write);