@@ -26,53 +26,58 @@ use std::thread::LocalKey;
26
26
27
27
static GLOBAL_MODULE : Lazy < RwLock < Module > > = Lazy :: new ( Default :: default) ;
28
28
29
- pub fn read_global_module ( ) -> RwLockReadGuard < ' static , Module > {
30
- ( & * GLOBAL_MODULE ) . read ( ) . expect ( "get write lock failed" )
29
+ pub fn read_global_module < R > ( f : impl FnOnce ( & Module ) -> R ) -> R {
30
+ let module = ( & * GLOBAL_MODULE ) . read ( ) . expect ( "get write lock failed" ) ;
31
+ f ( & module)
31
32
}
32
33
33
- pub fn write_global_module ( ) -> RwLockWriteGuard < ' static , Module > {
34
- ( & * GLOBAL_MODULE ) . write ( ) . expect ( "get write lock failed" )
34
+ pub fn write_global_module < R > ( f : impl FnOnce ( & mut Module ) -> R ) -> R {
35
+ let mut module = ( & * GLOBAL_MODULE ) . write ( ) . expect ( "get write lock failed" ) ;
36
+ f ( & mut module)
35
37
}
36
38
37
39
unsafe extern "C" fn module_startup ( r#type : c_int , module_number : c_int ) -> c_int {
38
40
let args = ModuleArgs :: new ( r#type, module_number) ;
39
- {
40
- args. register_ini_entries ( read_global_module ( ) . ini_entries ( ) ) ;
41
- }
42
- {
43
- for class_entity in & read_global_module ( ) . class_entities {
41
+ read_global_module ( |module| {
42
+ args. register_ini_entries ( module. ini_entries ( ) ) ;
43
+ for class_entity in & module. class_entities {
44
44
class_entity. init ( ) ;
45
45
class_entity. declare_properties ( ) ;
46
46
}
47
- }
48
- match & read_global_module ( ) . module_init {
49
- Some ( f ) => f ( args ) as c_int ,
50
- None => 1 ,
51
- }
47
+ match & module . module_init {
48
+ Some ( f ) => f ( args ) as c_int ,
49
+ None => 1 ,
50
+ }
51
+ } )
52
52
}
53
53
54
54
unsafe extern "C" fn module_shutdown ( r#type : c_int , module_number : c_int ) -> c_int {
55
55
let args = ModuleArgs :: new ( r#type, module_number) ;
56
56
args. unregister_ini_entries ( ) ;
57
-
58
- match & read_global_module ( ) . module_shutdown {
59
- Some ( f) => f ( args) as c_int ,
60
- None => 1 ,
61
- }
57
+ read_global_module ( |module| {
58
+ match & module. module_shutdown {
59
+ Some ( f) => f ( args) as c_int ,
60
+ None => 1 ,
61
+ }
62
+ } )
62
63
}
63
64
64
65
unsafe extern "C" fn request_startup ( r#type : c_int , request_number : c_int ) -> c_int {
65
- match & read_global_module ( ) . request_init {
66
- Some ( f) => f ( ModuleArgs :: new ( r#type, request_number) ) as c_int ,
67
- None => 1 ,
68
- }
66
+ read_global_module ( |module| {
67
+ match & module. request_init {
68
+ Some ( f) => f ( ModuleArgs :: new ( r#type, request_number) ) as c_int ,
69
+ None => 1 ,
70
+ }
71
+ } )
69
72
}
70
73
71
74
unsafe extern "C" fn request_shutdown ( r#type : c_int , request_number : c_int ) -> c_int {
72
- match & read_global_module ( ) . request_shutdown {
73
- Some ( f) => f ( ModuleArgs :: new ( r#type, request_number) ) as c_int ,
74
- None => 1 ,
75
- }
75
+ read_global_module ( |module| {
76
+ match & module. request_shutdown {
77
+ Some ( f) => f ( ModuleArgs :: new ( r#type, request_number) ) as c_int ,
78
+ None => 1 ,
79
+ }
80
+ } )
76
81
}
77
82
78
83
#[ derive( Default ) ]
0 commit comments