Store `safe` property in Extra state to inherit into Lua structs made from pointers
This commit is contained in:
parent
4af7bcf0d9
commit
108682cc71
|
@ -64,6 +64,7 @@ struct ExtraData {
|
||||||
|
|
||||||
libs: StdLib,
|
libs: StdLib,
|
||||||
mem_info: *mut MemoryInfo,
|
mem_info: *mut MemoryInfo,
|
||||||
|
safe: bool, // Same as in the Lua struct
|
||||||
|
|
||||||
ref_thread: *mut ffi::lua_State,
|
ref_thread: *mut ffi::lua_State,
|
||||||
ref_stack_size: c_int,
|
ref_stack_size: c_int,
|
||||||
|
@ -185,6 +186,7 @@ impl Lua {
|
||||||
mlua_expect!(lua.disable_c_modules(), "Error during disabling C modules");
|
mlua_expect!(lua.disable_c_modules(), "Error during disabling C modules");
|
||||||
}
|
}
|
||||||
lua.safe = true;
|
lua.safe = true;
|
||||||
|
mlua_expect!(lua.extra.lock(), "extra is poisoned").safe = true;
|
||||||
|
|
||||||
Ok(lua)
|
Ok(lua)
|
||||||
}
|
}
|
||||||
|
@ -349,6 +351,7 @@ impl Lua {
|
||||||
ref_thread,
|
ref_thread,
|
||||||
libs: StdLib::NONE,
|
libs: StdLib::NONE,
|
||||||
mem_info: ptr::null_mut(),
|
mem_info: ptr::null_mut(),
|
||||||
|
safe: false,
|
||||||
// We need 1 extra stack space to move values in and out of the ref stack.
|
// We need 1 extra stack space to move values in and out of the ref stack.
|
||||||
ref_stack_size: ffi::LUA_MINSTACK - 1,
|
ref_stack_size: ffi::LUA_MINSTACK - 1,
|
||||||
ref_stack_top: 0,
|
ref_stack_top: 0,
|
||||||
|
@ -1908,12 +1911,14 @@ impl Lua {
|
||||||
);
|
);
|
||||||
ffi::lua_pop(state, 1);
|
ffi::lua_pop(state, 1);
|
||||||
|
|
||||||
|
let safe = mlua_expect!(extra.lock(), "extra is poisoned").safe;
|
||||||
|
|
||||||
Lua {
|
Lua {
|
||||||
state,
|
state,
|
||||||
main_state: get_main_state(state),
|
main_state: get_main_state(state),
|
||||||
extra,
|
extra,
|
||||||
ephemeral: true,
|
ephemeral: true,
|
||||||
safe: true, // TODO: Inherit the attribute
|
safe,
|
||||||
_no_ref_unwind_safe: PhantomData,
|
_no_ref_unwind_safe: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue