From 3d6ef164e2b47622c98d7199076e07b0752e238e Mon Sep 17 00:00:00 2001 From: Chris H-C Date: Thu, 14 Jan 2021 09:45:17 -0500 Subject: [PATCH] bug 1686726 - Fix lock order inversion in RLB Timing Distribution --- CHANGELOG.md | 2 ++ glean-core/rlb/src/private/timing_distribution.rs | 13 ++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f860745ec7..4f0395368b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ * Android * A new metric `glean.validation.foreground_count` was added to the metrics ping. +* Rust + * BUGFIX: Fix lock order inversion in RLB Timing Distribution ([#1431](https://github.com/mozilla/glean/pull/1431)). # v33.10.1 (2021-01-06) diff --git a/glean-core/rlb/src/private/timing_distribution.rs b/glean-core/rlb/src/private/timing_distribution.rs index 4d2b65f380..4c1cd8b99a 100644 --- a/glean-core/rlb/src/private/timing_distribution.rs +++ b/glean-core/rlb/src/private/timing_distribution.rs @@ -65,12 +65,15 @@ impl glean_core::traits::TimingDistribution for TimingDistributionMetric { ) -> Option { crate::block_on_dispatcher(); - let inner = self.0.read().unwrap(); - let queried_ping_name = ping_name - .into() - .unwrap_or_else(|| &inner.meta().send_in_pings[0]); + crate::with_glean(|glean| { + // The order of taking these locks matter. Glean must be first. + let inner = self.0.read().unwrap(); + let queried_ping_name = ping_name + .into() + .unwrap_or_else(|| &inner.meta().send_in_pings[0]); - crate::with_glean(|glean| inner.test_get_value(glean, queried_ping_name)) + inner.test_get_value(glean, queried_ping_name) + }) } fn test_get_num_recorded_errors<'a, S: Into>>(