@@ -516,6 +516,37 @@ impl InnerBackend {
516
516
}
517
517
}
518
518
519
+ fn destroy_object_inner ( & self , guard : & mut MutexGuard < ConnectionState > , id : & ObjectId ) {
520
+ if let Some ( ref alive) = id. id . alive {
521
+ let udata = unsafe {
522
+ Box :: from_raw ( ffi_dispatch ! (
523
+ wayland_client_handle( ) ,
524
+ wl_proxy_get_user_data,
525
+ id. id. ptr
526
+ ) as * mut ProxyUserData )
527
+ } ;
528
+ unsafe {
529
+ ffi_dispatch ! (
530
+ wayland_client_handle( ) ,
531
+ wl_proxy_set_user_data,
532
+ id. id. ptr,
533
+ std:: ptr:: null_mut( )
534
+ ) ;
535
+ }
536
+ alive. store ( false , Ordering :: Release ) ;
537
+ udata. data . destroyed ( id. clone ( ) ) ;
538
+ }
539
+ guard. known_proxies . remove ( & id. id . ptr ) ;
540
+ unsafe {
541
+ ffi_dispatch ! ( wayland_client_handle( ) , wl_proxy_destroy, id. id. ptr) ;
542
+ }
543
+ }
544
+
545
+ pub fn destroy_object ( & self , id : & ObjectId ) -> Result < ( ) , InvalidId > {
546
+ self . destroy_object_inner ( & mut self . lock_state ( ) , id) ;
547
+ Ok ( ( ) )
548
+ }
549
+
519
550
pub fn send_request (
520
551
& self ,
521
552
Message { sender_id : ObjectId { id } , opcode, args } : Message < ObjectId , RawFd > ,
@@ -732,29 +763,7 @@ impl InnerBackend {
732
763
} ;
733
764
734
765
if message_desc. is_destructor {
735
- if let Some ( ref alive) = id. alive {
736
- let udata = unsafe {
737
- Box :: from_raw ( ffi_dispatch ! (
738
- wayland_client_handle( ) ,
739
- wl_proxy_get_user_data,
740
- id. ptr
741
- ) as * mut ProxyUserData )
742
- } ;
743
- unsafe {
744
- ffi_dispatch ! (
745
- wayland_client_handle( ) ,
746
- wl_proxy_set_user_data,
747
- id. ptr,
748
- std:: ptr:: null_mut( )
749
- ) ;
750
- }
751
- alive. store ( false , Ordering :: Release ) ;
752
- udata. data . destroyed ( ObjectId { id : id. clone ( ) } ) ;
753
- }
754
- guard. known_proxies . remove ( & id. ptr ) ;
755
- unsafe {
756
- ffi_dispatch ! ( wayland_client_handle( ) , wl_proxy_destroy, id. ptr) ;
757
- }
766
+ self . destroy_object_inner ( & mut guard, & ObjectId { id } )
758
767
}
759
768
760
769
Ok ( child_id)
0 commit comments