11use std:: any:: TypeId ;
22use std:: cell:: UnsafeCell ;
3- use std:: mem:: { self , MaybeUninit } ;
3+ use std:: mem:: MaybeUninit ;
44use std:: os:: raw:: { c_int, c_void} ;
55use std:: ptr;
66use std:: rc:: Rc ;
@@ -12,7 +12,7 @@ use rustc_hash::FxHashMap;
1212use crate :: error:: Result ;
1313use crate :: state:: RawLua ;
1414use crate :: stdlib:: StdLib ;
15- use crate :: types:: { AppData , ReentrantMutex , XRc , XWeak } ;
15+ use crate :: types:: { AppData , ReentrantMutex , XRc } ;
1616use crate :: util:: { get_internal_metatable, push_internal_userdata, TypeKey , WrappedFailure } ;
1717
1818#[ cfg( any( feature = "luau" , doc) ) ]
@@ -31,10 +31,8 @@ const REF_STACK_RESERVE: c_int = 1;
3131
3232/// Data associated with the Lua state.
3333pub ( crate ) struct ExtraData {
34- // Same layout as `Lua`
35- pub ( super ) lua : MaybeUninit < XRc < ReentrantMutex < RawLua > > > ,
36- // Same layout as `WeakLua`
37- pub ( super ) weak : MaybeUninit < XWeak < ReentrantMutex < RawLua > > > ,
34+ pub ( super ) lua : MaybeUninit < Lua > ,
35+ pub ( super ) weak : MaybeUninit < WeakLua > ,
3836
3937 pub ( super ) registered_userdata : FxHashMap < TypeId , c_int > ,
4038 pub ( super ) registered_userdata_mt : FxHashMap < * const c_void , Option < TypeId > > ,
@@ -185,12 +183,15 @@ impl ExtraData {
185183 extra
186184 }
187185
188- pub ( super ) unsafe fn set_lua ( & mut self , lua : & XRc < ReentrantMutex < RawLua > > ) {
189- self . lua . write ( XRc :: clone ( lua) ) ;
186+ pub ( super ) unsafe fn set_lua ( & mut self , raw : & XRc < ReentrantMutex < RawLua > > ) {
187+ self . lua . write ( Lua {
188+ raw : XRc :: clone ( raw) ,
189+ collect_garbage : false ,
190+ } ) ;
190191 if cfg ! ( not( feature = "module" ) ) {
191- XRc :: decrement_strong_count ( XRc :: as_ptr ( lua ) ) ;
192+ XRc :: decrement_strong_count ( XRc :: as_ptr ( raw ) ) ;
192193 }
193- self . weak . write ( XRc :: downgrade ( lua ) ) ;
194+ self . weak . write ( WeakLua ( XRc :: downgrade ( raw ) ) ) ;
194195 }
195196
196197 pub ( super ) unsafe fn get ( state : * mut ffi:: lua_State ) -> * mut Self {
@@ -228,16 +229,16 @@ impl ExtraData {
228229
229230 #[ inline( always) ]
230231 pub ( super ) unsafe fn lua ( & self ) -> & Lua {
231- mem :: transmute ( self . lua . assume_init_ref ( ) )
232+ self . lua . assume_init_ref ( )
232233 }
233234
234235 #[ inline( always) ]
235236 pub ( super ) unsafe fn raw_lua ( & self ) -> & RawLua {
236- & * self . lua . assume_init_ref ( ) . data_ptr ( )
237+ & * self . lua . assume_init_ref ( ) . raw . data_ptr ( )
237238 }
238239
239240 #[ inline( always) ]
240241 pub ( super ) unsafe fn weak ( & self ) -> & WeakLua {
241- mem :: transmute ( self . weak . assume_init_ref ( ) )
242+ self . weak . assume_init_ref ( )
242243 }
243244}
0 commit comments