Update iface_rt behaviour to fix tokio update

This commit is contained in:
Elias Schriefer 2020-11-03 17:43:50 +01:00
parent 178abf5a72
commit 52d34e42a1
2 changed files with 6 additions and 18 deletions

View File

@ -132,7 +132,7 @@ macro_rules! handle_iface {
($m:ident, |$data:ident| $($f:tt)+) => {move |$m| tokio::task::block_in_place(move || { ($m:ident, |$data:ident| $($f:tt)+) => {move |$m| tokio::task::block_in_place(move || {
let $data = $m.path.get_data(); let $data = $m.path.get_data();
// Run a Future on the dedicated tokio runtime // Run a Future on the dedicated tokio runtime
iface_rt_handle().block_on(async move { iface_rt().block_on(async move {
$($f)+ $($f)+
}) })
})}; })};

View File

@ -12,38 +12,26 @@ mod ifaces;
const DBUS_NAME: &'static str = "org.ddnss.sfs.mc"; const DBUS_NAME: &'static str = "org.ddnss.sfs.mc";
// Interface tokio runtime // Interface tokio runtime
static mut IFACE_RT: Option<tokio::runtime::Runtime> = None; static mut IFACE_RT: Option<Arc<tokio::runtime::Runtime>> = None;
static mut IFACE_RT_HANDLE: Option<Arc<tokio::runtime::Handle>> = None;
static IFACE_RT_INIT: std::sync::Once = std::sync::Once::new(); static IFACE_RT_INIT: std::sync::Once = std::sync::Once::new();
fn iface_name(iface: &str) -> String { fn iface_name(iface: &str) -> String {
DBUS_NAME.to_owned() + "." + iface DBUS_NAME.to_owned() + "." + iface
} }
fn iface_rt_handle() -> Arc<tokio::runtime::Handle> { fn iface_rt() -> Arc<tokio::runtime::Runtime> {
IFACE_RT_INIT.call_once(|| { IFACE_RT_INIT.call_once(|| {
unsafe { unsafe {
IFACE_RT = Some(tokio::runtime::Builder::new() IFACE_RT = Some(Arc::new(tokio::runtime::Builder::new_multi_thread()
.thread_name("iface-runtime-worker") .thread_name("iface-runtime-worker")
.build() .build()
.unwrap() .unwrap()
); ));
IFACE_RT_HANDLE = match &IFACE_RT {
Some(iface_rt) => Some(Arc::new(iface_rt
.handle()
.clone()
)),
_ => unreachable!()
};
} }
}); });
unsafe { unsafe {
match &IFACE_RT_HANDLE { IFACE_RT.clone().unwrap()
Some(iface_rt_handle) => iface_rt_handle.clone(),
_ => unreachable!()
}
} }
} }