Skip to content

Commit

Permalink
Merge #2196
Browse files Browse the repository at this point in the history
2196: Update `memory` Wasm C API example r=MarkMcCaskey a=MarkMcCaskey

Related to #2193

While working on this, I noticed that our implementation of the Wasm C API diverges from what `wasm.h` says in that we return owned data for `wasm_extern_as_*` and we free it with

```
    wasm_memory_delete(memory);
    wasm_func_delete(mem_size);
    wasm_func_delete(set_at);
    wasm_func_delete(get_at);
```

this data should not be `own`ed and we should not free it. I'll file a separate issue for this to follow up on.

Co-authored-by: Mark McCaskey <[email protected]>
  • Loading branch information
bors[bot] and Mark McCaskey authored Mar 18, 2021
2 parents 031afdf + 5650e12 commit cc37172
Show file tree
Hide file tree
Showing 11 changed files with 20 additions and 2 deletions.
2 changes: 2 additions & 0 deletions lib/c-api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ int main(int argc, const char* argv[]) {
wasm_byte_vec_new(&wat, strlen(wat_string), wat_string);
wasm_byte_vec_t wasm_bytes;
wat2wasm(&wat, &wasm_bytes);
wasm_byte_vec_delete(&wat);

printf("Creating the store...\n");
wasm_engine_t* engine = wasm_engine_new();
Expand Down Expand Up @@ -102,6 +103,7 @@ int main(int argc, const char* argv[]) {

wasm_func_delete(sum_func);
wasm_module_delete(module);
wasm_extern_vec_delete(&exports);
wasm_instance_delete(instance);
wasm_store_delete(store);
wasm_engine_delete(engine);
Expand Down
2 changes: 2 additions & 0 deletions lib/c-api/examples/exports-function.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ int main(int argc, const char* argv[]) {
wasm_byte_vec_new(&wat, strlen(wat_string), wat_string);
wasm_byte_vec_t wasm_bytes;
wat2wasm(&wat, &wasm_bytes);
wasm_byte_vec_delete(&wat);

printf("Creating the store...\n");
wasm_engine_t* engine = wasm_engine_new();
Expand Down Expand Up @@ -79,6 +80,7 @@ int main(int argc, const char* argv[]) {
wasm_func_delete(sum_func);
wasm_module_delete(module);
wasm_instance_delete(instance);
wasm_extern_vec_delete(&exports);
wasm_store_delete(store);
wasm_engine_delete(engine);
}
2 changes: 2 additions & 0 deletions lib/c-api/examples/exports-global.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ int main(int argc, const char* argv[]) {
wasm_byte_vec_new(&wat, strlen(wat_string), wat_string);
wasm_byte_vec_t wasm_bytes;
wat2wasm(&wat, &wasm_bytes);
wasm_byte_vec_delete(&wat);

printf("Creating the store...\n");
wasm_engine_t* engine = wasm_engine_new();
Expand Down Expand Up @@ -111,6 +112,7 @@ int main(int argc, const char* argv[]) {
wasm_global_delete(some);
wasm_global_delete(one);
wasm_module_delete(module);
wasm_extern_vec_delete(&exports);
wasm_instance_delete(instance);
wasm_store_delete(store);
wasm_engine_delete(engine);
Expand Down
4 changes: 3 additions & 1 deletion lib/c-api/examples/features.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ int main(int argc, const char* argv[]) {
wasm_byte_vec_new(&wat, strlen(wat_string), wat_string);
wasm_byte_vec_t wasm_bytes;
wat2wasm(&wat, &wasm_bytes);
wasm_byte_vec_delete(&wat);

printf("Creating the config and the features...\n");
wasm_config_t* config = wasm_config_new();
Expand Down Expand Up @@ -81,7 +82,8 @@ int main(int argc, const char* argv[]) {
}

printf("Got `(2, 1)`!\n");


wasm_extern_vec_delete(&exports);
wasm_module_delete(module);
wasm_instance_delete(instance);
wasm_store_delete(store);
Expand Down
2 changes: 2 additions & 0 deletions lib/c-api/examples/imports-exports.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ int main(int argc, const char* argv[]) {
wasm_byte_vec_new(&wat, strlen(wat_string), wat_string);
wasm_byte_vec_t wasm_bytes;
wat2wasm(&wat, &wasm_bytes);
wasm_byte_vec_delete(&wat);

printf("Creating the store...\n");
wasm_engine_t* engine = wasm_engine_new();
Expand Down Expand Up @@ -128,6 +129,7 @@ int main(int argc, const char* argv[]) {
wasm_table_delete(table);
wasm_memory_delete(memory);
wasm_module_delete(module);
wasm_extern_vec_delete(&exports);
wasm_instance_delete(instance);
wasm_store_delete(store);
wasm_engine_delete(engine);
Expand Down
1 change: 1 addition & 0 deletions lib/c-api/examples/instance.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ int main(int argc, const char* argv[]) {

printf("Results of `add_one`: %d\n", results_val[0].of.i32);

wasm_extern_vec_delete(&exports);
wasm_store_delete(store);
wasm_engine_delete(engine);
}
2 changes: 2 additions & 0 deletions lib/c-api/examples/memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ int main(int argc, const char* argv[]) {
wasm_byte_vec_new(&wat, strlen(wat_string), wat_string);
wasm_byte_vec_t wasm_bytes;
wat2wasm(&wat, &wasm_bytes);
wasm_byte_vec_delete(&wat);

printf("Creating the store...\n");
wasm_engine_t* engine = wasm_engine_new();
Expand Down Expand Up @@ -102,6 +103,7 @@ int main(int argc, const char* argv[]) {
wasm_func_delete(mem_size);
wasm_func_delete(set_at);
wasm_func_delete(get_at);
wasm_extern_vec_delete(&exports);
wasm_module_delete(module);
wasm_instance_delete(instance);
wasm_store_delete(store);
Expand Down
1 change: 1 addition & 0 deletions lib/c-api/src/wasm_c_api/externals/global.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ mod tests {
wasm_instance_delete(instance);
wasm_byte_vec_delete(&wasm_bytes);
wasm_byte_vec_delete(&wat);
wasm_extern_vec_delete(&exports);
wasm_store_delete(store);
wasm_engine_delete(engine);

Expand Down
1 change: 1 addition & 0 deletions lib/c-api/src/wasm_c_api/externals/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ mod tests {
assert(wasm_extern_kind(function_copy) == WASM_EXTERN_FUNC);

wasm_extern_delete(function_copy);
wasm_extern_vec_delete(&exports);
wasm_instance_delete(instance);
wasm_module_delete(module);
wasm_byte_vec_delete(&wasm);
Expand Down
2 changes: 2 additions & 0 deletions lib/c-api/src/wasm_c_api/instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ pub unsafe extern "C" fn wasm_instance_delete(_instance: Option<Box<wasm_instanc
/// assert(wasm_extern_kind(exports.data[3]) == WASM_EXTERN_MEMORY);
///
/// // Free everything.
/// wasm_extern_vec_delete(&exports);
/// wasm_instance_delete(instance);
/// wasm_module_delete(module);
/// wasm_byte_vec_delete(&wasm);
Expand Down Expand Up @@ -290,6 +291,7 @@ mod tests {
assert(results[0].of.i32 == 2);

// Free everything.
wasm_extern_vec_delete(&exports);
wasm_instance_delete(instance);
wasm_func_delete(sum_function);
wasm_functype_delete(sum_type);
Expand Down
3 changes: 2 additions & 1 deletion lib/c-api/src/wasm_c_api/unstable/middlewares/metering.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@
//! // There is 0 point left… they are exhausted.
//! assert(wasmer_metering_points_are_exhausted(instance) == true);
//! }
//!
//!
//! wasm_extern_vec_delete(&exports);
//! wasm_instance_delete(instance);
//! wasm_module_delete(module);
//! wasm_store_delete(store);
Expand Down

0 comments on commit cc37172

Please sign in to comment.