From 1f8f1082a3ad1955ddfe7a6f07e546eeea65cf03 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 11 Apr 2022 09:50:47 +0100 Subject: [PATCH] Replace a Mutex which was being an open-coded Lazy Signed-off-by: Ian Jackson --- src/shapelib.rs | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/shapelib.rs b/src/shapelib.rs index 1e896da1..c635733d 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -71,7 +71,7 @@ struct OccData_Internal { outline: Outline, desc: Html, xform: FaceTransform, - svgd: parking_lot::Mutex>>, + svgd: lazy_init::Lazy,SpecError>>, } #[derive(Error,Debug)] @@ -574,23 +574,13 @@ impl Contents { }, OccData::Internal(occ) => { let occ_name = occ.item_name.clone(); - let svgd = { - let mut svgd = occ.svgd.lock(); - let svgd = &mut *svgd; - let svgd = match svgd { - Some(svgd) => svgd.clone(), - None => { - let occ_data = self.load_svg( - occ.item_name.unnest::().unnest(), - /* original: */ lib_name, name.as_str() - )?; - let occ_data = Arc::new(occ_data); - *svgd = Some(occ_data.clone()); - occ_data - }, - }; - svgd - }; + let svgd = occ.svgd.get_or_create(||{ + let occ_data = self.load_svg( + occ.item_name.unnest::().unnest(), + /* original: */ lib_name, name.as_str() + )?; + Ok(Arc::new(occ_data)) + }).clone()?; let it = Arc::new(ItemOccultable { svgd, xform: occ.xform.clone(), -- 2.30.2