aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--prometheus.scm19
1 files changed, 12 insertions, 7 deletions
diff --git a/prometheus.scm b/prometheus.scm
index e0f58f6..bae0695 100644
--- a/prometheus.scm
+++ b/prometheus.scm
@@ -372,13 +372,18 @@ The metric with the name @var{metric-name} is fetched from the
"
(let* ((metric
(or (metrics-registry-fetch-metric registry metric-name)
- (make-histogram-metric
- registry
- metric-name
- #:buckets buckets
- #:docstring docstring
- #:labels labels
- #:label-preset-values label-preset-values)))
+ (monitor
+ ;; Check once more in case another thread has created
+ ;; the metric while this thread was waiting for the
+ ;; mutex
+ (or (metrics-registry-fetch-metric registry metric-name)
+ (make-histogram-metric
+ registry
+ metric-name
+ #:buckets buckets
+ #:docstring docstring
+ #:labels labels
+ #:label-preset-values label-preset-values)))))
(start-time (get-internal-real-time)))
(call-with-values
thunk