From: Ian Jackson Date: Mon, 11 Apr 2022 08:50:47 +0000 (+0100) Subject: Replace a Mutex which was being an open-coded Lazy X-Git-Tag: otter-1.1.0~620 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=1f8f1082a3ad1955ddfe7a6f07e546eeea65cf03;p=otter.git Replace a Mutex which was being an open-coded Lazy Signed-off-by: Ian Jackson --- 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(),