Use RefCell for thread_local state

This commit is contained in:
Aode (Lion) 2022-02-24 18:10:13 -06:00
parent 66bd357fa8
commit aede3ae0c9

View file

@ -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)