Skip to content

Commit 36065db

Browse files
rm spinlock (unicode-org#4076)
1 parent 687d0ff commit 36065db

File tree

4 files changed

+14
-67
lines changed

4 files changed

+14
-67
lines changed

experimental/transliterate/src/compile/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use alloc::collections::BTreeMap;
88
use alloc::format;
99
use alloc::string::{String, ToString};
1010
use alloc::vec::Vec;
11+
use core::cell::RefCell;
1112
use icu_locid::Locale;
1213
use icu_normalizer::provider::*;
1314
use icu_properties::{provider::*, sets, PropertiesError};
@@ -17,7 +18,6 @@ mod parse;
1718
mod pass1;
1819
mod pass2;
1920
mod rule_group_agg;
20-
mod spin_lock;
2121

2222
/// The direction of a rule-based transliterator in respect to its source.
2323
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
@@ -93,7 +93,7 @@ impl Direction {
9393
pub struct RuleCollection {
9494
id_mapping: BTreeMap<String, Locale>, // alias -> bcp id
9595
// these two maps need to lock together
96-
data: spin_lock::SpinLock<(
96+
data: RefCell<(
9797
BTreeMap<String, (String, bool, bool)>, // locale -> source/reverse/visible
9898
BTreeMap<String, Result<DataResponse<TransliteratorRulesV1Marker>, DataError>>, // cache
9999
)>,
@@ -109,7 +109,7 @@ impl RuleCollection {
109109
reverse: bool,
110110
visible: bool,
111111
) {
112-
self.data.get_mut().0.insert(
112+
self.data.borrow_mut().0.insert(
113113
crate::ids::bcp47_to_data_locale(id).to_string(),
114114
(source, reverse, visible),
115115
);
@@ -306,7 +306,7 @@ where
306306
) -> Result<DataResponse<TransliteratorRulesV1Marker>, DataError> {
307307
let locale = req.locale.to_string();
308308

309-
let mut exclusive_data = self.collection.data.lock();
309+
let mut exclusive_data = self.collection.data.borrow_mut();
310310

311311
if let Some(response) = exclusive_data.1.get(&locale) {
312312
return response.clone();
@@ -455,7 +455,7 @@ where
455455
NP: ?Sized,
456456
{
457457
fn supported_locales(&self) -> Result<Vec<DataLocale>, DataError> {
458-
let exclusive_data = self.collection.data.lock();
458+
let exclusive_data = self.collection.data.borrow();
459459
#[allow(clippy::unwrap_used)] // the maps' keys are valid DataLocales
460460
Ok(exclusive_data
461461
.0

experimental/transliterate/src/compile/spin_lock.rs

Lines changed: 0 additions & 59 deletions
This file was deleted.

provider/datagen/src/transform/cldr/source.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use once_cell::sync::OnceCell;
1818
use std::collections::HashSet;
1919
use std::fmt::Debug;
2020
use std::str::FromStr;
21+
use std::sync::Mutex;
2122

2223
#[derive(Debug)]
2324
pub(crate) struct CldrCache {
@@ -26,7 +27,7 @@ pub(crate) struct CldrCache {
2627
locale_expander: OnceCell<LocaleExpander>,
2728
#[cfg(feature = "icu_transliterate")]
2829
// used by transforms/mod.rs
29-
pub(super) transforms: OnceCell<icu_transliterate::RuleCollection>,
30+
pub(super) transforms: OnceCell<Mutex<icu_transliterate::RuleCollection>>,
3031
}
3132

3233
impl CldrCache {

provider/datagen/src/transform/cldr/transforms/mod.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ use icu_provider::datagen::IterableDataProvider;
99
use icu_provider::prelude::*;
1010
use icu_transliterate::provider::*;
1111
use icu_transliterate::RuleCollection;
12+
use std::sync::Mutex;
1213

1314
impl CldrCache {
14-
fn transforms(&self) -> Result<&RuleCollection, DataError> {
15+
fn transforms(&self) -> Result<&Mutex<RuleCollection>, DataError> {
1516
self.transforms.get_or_try_init(|| {
1617
fn find_bcp47(aliases: &[transforms::TransformAlias]) -> Option<&Locale> {
1718
aliases
@@ -105,7 +106,7 @@ impl CldrCache {
105106
}
106107
}
107108
}
108-
Ok(provider)
109+
Ok(Mutex::new(provider))
109110
})
110111
}
111112
}
@@ -118,6 +119,8 @@ impl DataProvider<TransliteratorRulesV1Marker> for crate::DatagenProvider {
118119
self.check_req::<TransliteratorRulesV1Marker>(req)?;
119120
self.cldr()?
120121
.transforms()?
122+
.lock()
123+
.expect("poison")
121124
.as_provider_unstable(self, self)?
122125
.load(req)
123126
}
@@ -127,6 +130,8 @@ impl IterableDataProvider<TransliteratorRulesV1Marker> for crate::DatagenProvide
127130
fn supported_locales(&self) -> Result<Vec<DataLocale>, DataError> {
128131
self.cldr()?
129132
.transforms()?
133+
.lock()
134+
.expect("poison")
130135
.as_provider_unstable(self, self)?
131136
.supported_locales()
132137
}

0 commit comments

Comments
 (0)