Skip to content

Commit d7f100a

Browse files
committed
Remove once_cell dependency
1 parent 6920311 commit d7f100a

File tree

4 files changed

+14
-12
lines changed

4 files changed

+14
-12
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@ repository = "https://github.com/Amanieu/thread_local-rs"
99
readme = "README.md"
1010
keywords = ["thread_local", "concurrent", "thread"]
1111
edition = "2021"
12-
rust-version = "1.61"
12+
rust-version = "1.63"
1313

1414
[features]
1515
# this feature provides performance improvements using nightly features
1616
nightly = []
1717

1818
[dependencies]
19-
once_cell = "1.5.2"
2019
# this is required to gate `nightly` related code paths
2120
cfg-if = "1.0.0"
2221

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ thread_local = "1.1"
2121

2222
## Minimum Rust version
2323

24-
This crate's minimum supported Rust version (MSRV) is 1.61.0.
24+
This crate's minimum supported Rust version (MSRV) is 1.63.0.
2525

2626
## License
2727

src/thread_id.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
// copied, modified, or distributed except according to those terms.
77

88
use crate::POINTER_WIDTH;
9-
use once_cell::sync::Lazy;
109
use std::cell::Cell;
1110
use std::cmp::Reverse;
1211
use std::collections::BinaryHeap;
@@ -17,17 +16,19 @@ use std::sync::Mutex;
1716
/// indefinitely when it is used by many short-lived threads.
1817
struct ThreadIdManager {
1918
free_from: usize,
20-
free_list: BinaryHeap<Reverse<usize>>,
19+
free_list: Option<BinaryHeap<Reverse<usize>>>,
2120
}
21+
2222
impl ThreadIdManager {
23-
fn new() -> Self {
23+
const fn new() -> Self {
2424
Self {
2525
free_from: 0,
26-
free_list: BinaryHeap::new(),
26+
free_list: None,
2727
}
2828
}
29+
2930
fn alloc(&mut self) -> usize {
30-
if let Some(id) = self.free_list.pop() {
31+
if let Some(id) = self.free_list.as_mut().and_then(|heap| heap.pop()) {
3132
id.0
3233
} else {
3334
// `free_from` can't overflow as each thread takes up at least 2 bytes of memory and
@@ -38,12 +39,15 @@ impl ThreadIdManager {
3839
id
3940
}
4041
}
42+
4143
fn free(&mut self, id: usize) {
42-
self.free_list.push(Reverse(id));
44+
self.free_list
45+
.get_or_insert_with(BinaryHeap::new)
46+
.push(Reverse(id));
4347
}
4448
}
45-
static THREAD_ID_MANAGER: Lazy<Mutex<ThreadIdManager>> =
46-
Lazy::new(|| Mutex::new(ThreadIdManager::new()));
49+
50+
static THREAD_ID_MANAGER: Mutex<ThreadIdManager> = Mutex::new(ThreadIdManager::new());
4751

4852
/// Data which is unique to the current thread while it is running.
4953
/// A thread ID may be reused after a thread exits.

0 commit comments

Comments
 (0)