diff options
-rw-r--r-- | prometheus.scm | 19 |
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 |