From a0d2fffc90a58b656e720e604063d5e0ee04f462 Mon Sep 17 00:00:00 2001 From: ccgauche Date: Tue, 2 Mar 2021 17:41:28 +0100 Subject: [PATCH] Reduced unsafe --- plugin/derive/src/lib.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plugin/derive/src/lib.rs b/plugin/derive/src/lib.rs index 9687432875..3a7ce33f8b 100644 --- a/plugin/derive/src/lib.rs +++ b/plugin/derive/src/lib.rs @@ -58,15 +58,17 @@ pub fn event_handler(_args: TokenStream, item: TokenStream) -> TokenStream { // Artificially force the event handler to be type-correct fn force_event(event: E, inner: fn(E, &mut PLUGIN_STATE_TYPE) -> E::Response) -> E::Response { //let mut plugin_state = PLUGIN_STATE.lock().unwrap(); - unsafe { + assert_eq!(PLUGIN_STATE_GUARD.swap(true, std::sync::atomic::Ordering::Acquire), false); - if PLUGIN_STATE.is_none() { - PLUGIN_STATE = Some(PLUGIN_STATE_TYPE::default()); + unsafe { + if PLUGIN_STATE.is_none() { + PLUGIN_STATE = Some(PLUGIN_STATE_TYPE::default()); + } } - let out = inner(event, PLUGIN_STATE.as_mut().unwrap()); + let out = inner(event, unsafe {PLUGIN_STATE.as_mut().unwrap()}); PLUGIN_STATE_GUARD.store(false, std::sync::atomic::Ordering::Release); out - } + } ::veloren_plugin_rt::write_output(&force_event(input, inner)) }