1
1
use std:: any:: TypeId ;
2
2
use std:: cell:: UnsafeCell ;
3
- use std:: mem:: { self , MaybeUninit } ;
3
+ use std:: mem:: MaybeUninit ;
4
4
use std:: os:: raw:: { c_int, c_void} ;
5
5
use std:: ptr;
6
6
use std:: rc:: Rc ;
@@ -12,7 +12,7 @@ use rustc_hash::FxHashMap;
12
12
use crate :: error:: Result ;
13
13
use crate :: state:: RawLua ;
14
14
use crate :: stdlib:: StdLib ;
15
- use crate :: types:: { AppData , ReentrantMutex , XRc , XWeak } ;
15
+ use crate :: types:: { AppData , ReentrantMutex , XRc } ;
16
16
use crate :: util:: { get_internal_metatable, push_internal_userdata, TypeKey , WrappedFailure } ;
17
17
18
18
#[ cfg( any( feature = "luau" , doc) ) ]
@@ -31,10 +31,8 @@ const REF_STACK_RESERVE: c_int = 1;
31
31
32
32
/// Data associated with the Lua state.
33
33
pub ( 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 > ,
38
36
39
37
pub ( super ) registered_userdata : FxHashMap < TypeId , c_int > ,
40
38
pub ( super ) registered_userdata_mt : FxHashMap < * const c_void , Option < TypeId > > ,
@@ -185,12 +183,15 @@ impl ExtraData {
185
183
extra
186
184
}
187
185
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
+ } ) ;
190
191
if cfg ! ( not( feature = "module" ) ) {
191
- XRc :: decrement_strong_count ( XRc :: as_ptr ( lua ) ) ;
192
+ XRc :: decrement_strong_count ( XRc :: as_ptr ( raw ) ) ;
192
193
}
193
- self . weak . write ( XRc :: downgrade ( lua ) ) ;
194
+ self . weak . write ( WeakLua ( XRc :: downgrade ( raw ) ) ) ;
194
195
}
195
196
196
197
pub ( super ) unsafe fn get ( state : * mut ffi:: lua_State ) -> * mut Self {
@@ -228,16 +229,16 @@ impl ExtraData {
228
229
229
230
#[ inline( always) ]
230
231
pub ( super ) unsafe fn lua ( & self ) -> & Lua {
231
- mem :: transmute ( self . lua . assume_init_ref ( ) )
232
+ self . lua . assume_init_ref ( )
232
233
}
233
234
234
235
#[ inline( always) ]
235
236
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 ( )
237
238
}
238
239
239
240
#[ inline( always) ]
240
241
pub ( super ) unsafe fn weak ( & self ) -> & WeakLua {
241
- mem :: transmute ( self . weak . assume_init_ref ( ) )
242
+ self . weak . assume_init_ref ( )
242
243
}
243
244
}
0 commit comments