@@ -8,9 +8,7 @@ use crate::state::{Lua, LuaGuard, RawLua};
88use crate :: traits:: { FromLuaMulti , IntoLuaMulti } ;
99use crate :: types:: { Callback , CallbackUpvalue , ScopedCallback , ValueRef } ;
1010use crate :: userdata:: { AnyUserData , UserData , UserDataRegistry , UserDataStorage } ;
11- use crate :: util:: {
12- self , assert_stack, check_stack, get_metatable_ptr, get_userdata, take_userdata, StackGuard ,
13- } ;
11+ use crate :: util:: { self , check_stack, get_metatable_ptr, get_userdata, take_userdata, StackGuard } ;
1412
1513/// Constructed by the [`Lua::scope`] method, allows temporarily creating Lua userdata and
1614/// callbacks that are not required to be `Send` or `'static`.
@@ -284,22 +282,18 @@ impl<'scope, 'env: 'scope> Scope<'scope, 'env> {
284282 /// Shortens the lifetime of the userdata to the lifetime of the scope.
285283 fn seal_userdata < T : ' env > ( & self , ud : & AnyUserData ) {
286284 let destructor: DestructorCallback = Box :: new ( |rawlua, vref| unsafe {
287- let state = rawlua. state ( ) ;
288- let _sg = StackGuard :: new ( state) ;
289- assert_stack ( state, 2 ) ;
290-
291285 // Ensure that userdata is not destructed
292- match rawlua. push_userdata_ref ( & vref) {
286+ match rawlua. get_userdata_ref_type_id ( & vref) {
293287 Ok ( Some ( _) ) => { }
294288 Ok ( None ) => {
295289 // Deregister metatable
296- let mt_ptr = get_metatable_ptr ( state , - 1 ) ;
290+ let mt_ptr = get_metatable_ptr ( rawlua . ref_thread ( ) , vref . index ) ;
297291 rawlua. deregister_userdata_metatable ( mt_ptr) ;
298292 }
299293 Err ( _) => return vec ! [ ] ,
300294 }
301295
302- let data = take_userdata :: < UserDataStorage < T > > ( state ) ;
296+ let data = take_userdata :: < UserDataStorage < T > > ( rawlua . ref_thread ( ) , vref . index ) ;
303297 vec ! [ Box :: new( move || drop( data) ) ]
304298 } ) ;
305299 self . destructors . 0 . borrow_mut ( ) . push ( ( ud. 0 . clone ( ) , destructor) ) ;
0 commit comments