[wasmtime-api] Fixes wasm_exporttype_type leak
This commit is contained in:
committed by
Dan Gohman
parent
e2efa6318b
commit
b41e918ec3
@@ -259,6 +259,7 @@ declare_vec!(wasm_importtype_vec_t, *mut wasm_importtype_t);
|
|||||||
pub struct wasm_exporttype_t {
|
pub struct wasm_exporttype_t {
|
||||||
ty: ExportType,
|
ty: ExportType,
|
||||||
name_cache: Option<wasm_name_t>,
|
name_cache: Option<wasm_name_t>,
|
||||||
|
type_cache: Option<wasm_externtype_t>,
|
||||||
}
|
}
|
||||||
|
|
||||||
declare_vec!(wasm_exporttype_vec_t, *mut wasm_exporttype_t);
|
declare_vec!(wasm_exporttype_vec_t, *mut wasm_exporttype_t);
|
||||||
@@ -711,6 +712,7 @@ pub unsafe extern "C" fn wasm_module_new(
|
|||||||
.map(|e| wasm_exporttype_t {
|
.map(|e| wasm_exporttype_t {
|
||||||
ty: e.clone(),
|
ty: e.clone(),
|
||||||
name_cache: None,
|
name_cache: None,
|
||||||
|
type_cache: None,
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
let module = Box::new(wasm_module_t {
|
let module = Box::new(wasm_module_t {
|
||||||
@@ -903,11 +905,14 @@ pub unsafe extern "C" fn wasm_exporttype_name(et: *const wasm_exporttype_t) -> *
|
|||||||
pub unsafe extern "C" fn wasm_exporttype_type(
|
pub unsafe extern "C" fn wasm_exporttype_type(
|
||||||
et: *const wasm_exporttype_t,
|
et: *const wasm_exporttype_t,
|
||||||
) -> *const wasm_externtype_t {
|
) -> *const wasm_externtype_t {
|
||||||
let ty = Box::new(wasm_externtype_t {
|
if (*et).type_cache.is_none() {
|
||||||
|
let et = (et as *mut wasm_exporttype_t).as_mut().unwrap();
|
||||||
|
et.type_cache = Some(wasm_externtype_t {
|
||||||
ty: (*et).ty.r#type().clone(),
|
ty: (*et).ty.r#type().clone(),
|
||||||
cache: wasm_externtype_t_type_cache::Empty,
|
cache: wasm_externtype_t_type_cache::Empty,
|
||||||
});
|
});
|
||||||
Box::into_raw(ty)
|
}
|
||||||
|
(*et).type_cache.as_ref().unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|||||||
Reference in New Issue
Block a user