@@ -187,7 +187,7 @@ coresymbolication! {
187
187
/Versions/A/CoreSymbolication"]
188
188
extern "C" {
189
189
fn CSSymbolicatorCreateWithPid ( pid: c_int) -> CSTypeRef ;
190
- fn CSRelease ( rf: CSTypeRef ) -> c_void ;
190
+ fn CSRelease ( rf: CSTypeRef ) -> ( ) ;
191
191
fn CSSymbolicatorGetSymbolWithAddressAtTime (
192
192
cs: CSTypeRef , addr: * const c_void, time: u64 ) -> CSTypeRef ;
193
193
fn CSSymbolicatorGetSourceInfoWithAddressAtTime (
@@ -213,40 +213,55 @@ unsafe fn try_resolve(addr: *mut c_void, cb: &mut FnMut(&super::Symbol)) -> bool
213
213
if cs == CSREF_NULL {
214
214
return false ;
215
215
}
216
+ let _dtor = OwnedCSTypeRef {
217
+ ptr : cs,
218
+ CSRelease : lib. CSRelease ( ) ,
219
+ } ;
216
220
217
221
let info = lib. CSSymbolicatorGetSourceInfoWithAddressAtTime ( ) ( cs, addr, CS_NOW ) ;
218
222
let sym = if info == CSREF_NULL {
219
223
lib. CSSymbolicatorGetSymbolWithAddressAtTime ( ) ( cs, addr, CS_NOW )
220
224
} else {
221
225
lib. CSSourceInfoGetSymbol ( ) ( info)
222
226
} ;
227
+ if sym == CSREF_NULL {
228
+ return false ;
229
+ }
230
+ let owner = lib. CSSymbolGetSymbolOwner ( ) ( sym) ;
231
+ if owner == CSREF_NULL {
232
+ return false ;
233
+ }
223
234
224
- let mut rv = false ;
225
- if sym != CSREF_NULL {
226
- let owner = lib. CSSymbolGetSymbolOwner ( ) ( sym) ;
227
- if owner != CSREF_NULL {
228
- cb ( & super :: Symbol {
229
- inner : Symbol :: Core {
230
- path : if info != CSREF_NULL {
231
- lib. CSSourceInfoGetPath ( ) ( info)
232
- } else {
233
- ptr:: null ( )
234
- } ,
235
- lineno : if info != CSREF_NULL {
236
- lib. CSSourceInfoGetLineNumber ( ) ( info) as u32
237
- } else {
238
- 0
239
- } ,
240
- name : lib. CSSymbolGetMangledName ( ) ( sym) ,
241
- addr : lib. CSSymbolOwnerGetBaseAddress ( ) ( owner) ,
242
- } ,
243
- } ) ;
244
- rv = true ;
235
+ cb ( & super :: Symbol {
236
+ inner : Symbol :: Core {
237
+ path : if info != CSREF_NULL {
238
+ lib. CSSourceInfoGetPath ( ) ( info)
239
+ } else {
240
+ ptr:: null ( )
241
+ } ,
242
+ lineno : if info != CSREF_NULL {
243
+ lib. CSSourceInfoGetLineNumber ( ) ( info) as u32
244
+ } else {
245
+ 0
246
+ } ,
247
+ name : lib. CSSymbolGetMangledName ( ) ( sym) ,
248
+ addr : lib. CSSymbolOwnerGetBaseAddress ( ) ( owner) ,
249
+ } ,
250
+ } ) ;
251
+ true
252
+ }
253
+
254
+ struct OwnedCSTypeRef {
255
+ ptr : CSTypeRef ,
256
+ CSRelease : unsafe extern "C" fn ( CSTypeRef ) ,
257
+ }
258
+
259
+ impl Drop for OwnedCSTypeRef {
260
+ fn drop ( & mut self ) {
261
+ unsafe {
262
+ ( self . CSRelease ) ( self . ptr ) ;
245
263
}
246
264
}
247
- lib. CSRelease ( ) ( cs) ;
248
-
249
- rv
250
265
}
251
266
252
267
pub unsafe fn resolve ( what : ResolveWhat , cb : & mut FnMut ( & super :: Symbol ) ) {
0 commit comments