Use RefCell for thread_local state
This commit is contained in:
parent
66bd357fa8
commit
aede3ae0c9
|
@ -1,5 +1,6 @@
|
|||
use polldance::{AsFd, Key, NotifyToken, PollManager, Readiness};
|
||||
use std::{
|
||||
cell::RefCell,
|
||||
collections::{BTreeMap, HashMap},
|
||||
future::Future,
|
||||
sync::{
|
||||
|
@ -11,7 +12,7 @@ use std::{
|
|||
};
|
||||
|
||||
thread_local! {
|
||||
static REACTOR: Mutex<Option<Arc<Mutex<ReactorState>>>> = Mutex::new(None);
|
||||
static REACTOR: RefCell<Option<Arc<Mutex<ReactorState>>>> = RefCell::new(None);
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
@ -73,7 +74,7 @@ impl ReactorRef<'_> {
|
|||
T: 'static,
|
||||
{
|
||||
REACTOR.with(|reactor| {
|
||||
let guard = reactor.lock().unwrap();
|
||||
let guard = reactor.borrow_mut();
|
||||
|
||||
if let Some(state) = guard.as_ref() {
|
||||
let res = callback(ReactorRef {
|
||||
|
@ -117,7 +118,7 @@ impl From<polldance::io::Error> for Error {
|
|||
impl Drop for Reactor {
|
||||
fn drop(&mut self) {
|
||||
REACTOR.with(|reactor| {
|
||||
reactor.lock().unwrap().take();
|
||||
reactor.borrow_mut().take();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -167,7 +168,7 @@ impl Drop for RemoveFlag {
|
|||
impl ReactorState {
|
||||
fn init() -> Result<Arc<Mutex<Self>>, Error> {
|
||||
REACTOR.with(|reactor| {
|
||||
let mut guard = reactor.lock().unwrap();
|
||||
let mut guard = reactor.borrow_mut();
|
||||
|
||||
if guard.is_some() {
|
||||
Err(Error::AlreadyInitialized)
|
||||
|
|
Loading…
Reference in a new issue