@@ -17,7 +17,11 @@ use zip::ZipArchive;
1717impl AsmServer {
1818 pub fn new ( ) -> Self {
1919 Self {
20- loading_state : LoadingState { in_loading : true , loading_progress : 0.0 } ,
20+ loading_state : LoadingState {
21+ in_loading : true ,
22+ loading_progress : 0.0 ,
23+ err : None ,
24+ } ,
2125 accessor : Default :: default ( ) ,
2226 }
2327 }
@@ -48,7 +52,7 @@ impl AsmServer {
4852 } else {
4953 error ! ( "unsupported file type: {:?}" , path) ;
5054 } ;
51- * server. lock ( ) . unwrap ( ) = Some ( new_server. clone ( ) ) ;
55+ * server. lock ( ) = Some ( new_server. clone ( ) ) ;
5256 new_server. on_file_opened ( & context, render_target) ;
5357 } )
5458 } ) ;
@@ -72,7 +76,7 @@ impl AsmServer {
7276 . map_err ( OpenFileError :: LoadZip ) ?;
7377 let apk_accessor = read_apk ( zip) ?;
7478 // safe unwrap, no other places in current thread will access it.
75- * accessor. try_lock ( ) . unwrap ( ) = Some ( Arc :: new ( AccessorEnum :: Apk ( apk_accessor) ) ) ;
79+ * accessor. lock ( ) = Some ( AccessorEnum :: Apk ( apk_accessor) ) ;
7680 Ok ( ( ) )
7781 }
7882
@@ -104,7 +108,7 @@ impl AsmServer {
104108 let start = Instant :: now ( ) ;
105109 let dir_info = DirInfo :: from_classes ( Arc :: from ( "Root" ) , & classes) ;
106110 info ! ( "resolve dir info cost: {:?}" , start. elapsed( ) ) ;
107- app. app ( ) . deref_mut ( ) . left = Arc :: new ( Mutex :: new ( Left { root_node : dir_info } ) ) ;
111+ app. set_left ( Left { root_node : dir_info } ) ;
108112 }
109113}
110114
@@ -125,7 +129,8 @@ impl AsmServer {
125129 // read the input content (apk/dex/jar/class...)
126130 // return all class's internal names inside of this input.
127131 pub fn read_classes ( & self ) -> Vec < StrRef > {
128- let accessor = self . accessor_or_none ( ) ;
132+ let accessor_locked = self . accessor . lock ( ) ;
133+ let accessor = accessor_locked. deref ( ) ;
129134 match accessor {
130135 None => Vec :: new ( ) ,
131136 Some ( accessor) => {
@@ -138,19 +143,21 @@ impl AsmServer {
138143 }
139144
140145 pub fn find_class ( & self , class_key : & str ) -> bool {
141- let accessor = self . accessor_or_none ( ) ;
146+ let accessor_locked = self . accessor . lock ( ) ;
147+ let accessor = accessor_locked. deref ( ) ;
142148 match accessor {
143149 None => false ,
144150 Some ( accessor) => accessor. exist_class ( class_key) ,
145151 }
146152 }
147153
148154 pub fn read_content ( & self , class_key : & str ) -> Option < SmaliNode > {
149- self . accessor_or_none ( ) ?. read_content ( class_key)
150- }
151-
152- fn accessor_or_none ( & self ) -> Option < Arc < AccessorEnum > > {
153- self . accessor . try_lock ( ) . ok ( ) ?. deref ( ) . clone ( )
155+ let accessor_locked = self . accessor . lock ( ) ;
156+ let accessor = accessor_locked. deref ( ) ;
157+ match accessor {
158+ None => None ,
159+ Some ( accessor) => accessor. read_content ( class_key) ,
160+ }
154161 }
155162}
156163
0 commit comments