hot reload fix

This commit is contained in:
John Smith 2023-01-20 11:22:56 -05:00
parent 712659e86f
commit 74a9ccfaad
2 changed files with 15 additions and 8 deletions

View File

@ -156,17 +156,12 @@ using ValueSeqNum = UInt32; # sequence numbers for v
struct ValueKey @0xe64b0992c21a0736 { struct ValueKey @0xe64b0992c21a0736 {
publicKey @0 :ValueID; # the location of the value publicKey @0 :ValueID; # the location of the value
subkey @1 :Text; # the name of the subkey (or empty if the whole key) subkey @1 :Text; # the name of the subkey (or empty for the default subkey)
} }
# struct ValueKeySeq {
# key @0 :ValueKey; # the location of the value
# seq @1 :ValueSeqNum; # the sequence number of the value subkey
# }
struct ValueData @0xb4b7416f169f2a3d { struct ValueData @0xb4b7416f169f2a3d {
data @0 :Data; # value or subvalue contents seq @0 :ValueSeqNum; # sequence number of value
seq @1 :ValueSeqNum; # sequence number of value data @1 :Data; # value or subvalue contents
} }
# Operations # Operations

View File

@ -19,6 +19,7 @@ use tracing_subscriber::*;
// Globals // Globals
lazy_static! { lazy_static! {
static ref CORE_INITIALIZED: Mutex<bool> = Mutex::new(false);
static ref VEILID_API: AsyncMutex<Option<veilid_core::VeilidAPI>> = AsyncMutex::new(None); static ref VEILID_API: AsyncMutex<Option<veilid_core::VeilidAPI>> = AsyncMutex::new(None);
static ref FILTERS: Mutex<BTreeMap<&'static str, veilid_core::VeilidLayerFilter>> = static ref FILTERS: Mutex<BTreeMap<&'static str, veilid_core::VeilidLayerFilter>> =
Mutex::new(BTreeMap::new()); Mutex::new(BTreeMap::new());
@ -144,6 +145,17 @@ pub extern "C" fn initialize_veilid_flutter(dart_post_c_object_ptr: ffi::DartPos
#[no_mangle] #[no_mangle]
#[instrument] #[instrument]
pub extern "C" fn initialize_veilid_core(platform_config: FfiStr) { pub extern "C" fn initialize_veilid_core(platform_config: FfiStr) {
// Only do this once, ever
// Until we have Dart native finalizers running on hot-restart, this will cause a crash if run more than once
{
let mut core_init = CORE_INITIALIZED.lock();
if *core_init {
return;
}
*core_init = true;
}
let platform_config = platform_config.into_opt_string(); let platform_config = platform_config.into_opt_string();
let platform_config: VeilidFFIConfig = veilid_core::deserialize_opt_json(platform_config) let platform_config: VeilidFFIConfig = veilid_core::deserialize_opt_json(platform_config)
.expect("failed to deserialize plaform config json"); .expect("failed to deserialize plaform config json");