Avoid race conditions in call-with-duration-metric

This commit is contained in:
Christopher Baines 2020-12-10 09:43:04 +00:00
parent f661edf72d
commit 9d39235cc8

View file

@ -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