summaryrefslogtreecommitdiffstats
path: root/src/database/engine/metric.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/database/engine/metric.c')
-rw-r--r--src/database/engine/metric.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/database/engine/metric.c b/src/database/engine/metric.c
index 97db53efbc..8ae2b4b6fe 100644
--- a/src/database/engine/metric.c
+++ b/src/database/engine/metric.c
@@ -134,6 +134,10 @@ static inline time_t mrg_metric_get_first_time_s_smart(MRG *mrg __maybe_unused,
}
static inline REFCOUNT metric_acquire(MRG *mrg __maybe_unused, METRIC *metric) {
+#ifdef ENABLE_LIBBACKTRACE
+ bt_collect(&metric->uuid);
+#endif
+
spinlock_lock(&metric->refcount_spinlock);
if (metric->refcount >= 0)
@@ -154,10 +158,18 @@ static inline REFCOUNT metric_acquire(MRG *mrg __maybe_unused, METRIC *metric) {
}
static inline void metric_release(MRG *mrg __maybe_unused, METRIC *metric) {
+#ifdef ENABLE_LIBBACKTRACE
+ bt_collect(&metric->uuid);
+#endif
+
spinlock_lock(&metric->refcount_spinlock);
- if (metric->refcount <= 0)
+ if (metric->refcount <= 0) {
+ #ifdef ENABLE_LIBBACKTRACE
+ bt_dump(&metric->uuid);
+ #endif
fatal("METRIC: refcount is %d (zero or negative) during release", metric->refcount);
+ }
metric->refcount -= 1;
REFCOUNT refcount = metric->refcount;