Commit Graph

1044 Commits

Author SHA1 Message Date
Nick Lewycky
1e07207397 Include a NUL byte in the message returned by wasm_trap_message(). 2020-12-16 12:22:48 -08:00
Mark McCaskey
eb19ffdfbe Clarify new logic with a comment 2020-12-16 11:52:37 -08:00
Mark McCaskey
dd226b1dab Add fixes from publishing 2020-12-16 10:53:09 -08:00
Mark McCaskey
59df6917d8 Prepare for 1.0.0-beta2 release 2020-12-16 07:41:59 -08:00
bors[bot]
22c7bc8e19 Merge #1865
1865: Fix memory leak in host function envs r=MarkMcCaskey a=MarkMcCaskey

TODO: link to issue

This PR contains a number of changes:

1. Make `WasmerEnv: Clone`
2. Store a pointer to the `clone` function when creating a host function (Notably this is a feature that wouldn't work even if we _could_ use a proper trait object because you can't have a `Sized` trait object and `Clone: Sized`).
3. Store a pointer to the `drop` function when creating a host function.
4. Clone the env via pointer every time an `Instance` is made. Therefore each `Instance` gets its own, unique `Env` per host function with `Env`.
5. Add reference counting and drop logic to a sub-field of `wasmer_export::ExportFunction` which frees the original version of the `Env` (the thing that gets cloned each time an `Instance` is made) with the `drop` function pointer.
6. Change some logic in `vm::Instance` from SoA (struct of arrays) to AoS (array of structs): this uses more memory but is a bit less error prone and can be easily changed later.
7. Add logic on this new struct (`vm::ImportEnv`) that contains the function pointers for each import in `Instance` to drop (with the `drop` fn pointer) when the `vm::Instance` is being dropped. This fixes the original memory leak.
8. Add wrapper functions inside the host function creation functions which makes the layout of the user supplied env-pointer the responsibility of each function.  Thus, rather than `drop` being `Env::drop`, it's a function which frees all wrapper types, traverses indirections and frees the internal `Env` with `Env::drop`.  This simplifies code at the cost of making the `host_env` pointer (`vmctx`) not consistent in terms of what it actually points to.  This change fixes another memory leak related to the creation of host functions.

tl;dr: we're leaning into manually doing virtual method dispatch on `WasmerEnv`s and it actually works great! The biggest issue I have with the PR as-is is that the code isn't as clean/readable/robust as I'd ideally like it to be.

Edit (by @Hywan): This PR fixes #1584, #1714, #1865, #1667.

# Review

- [ ] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Mark McCaskey <mark@wasmer.io>
Co-authored-by: Mark McCaskey <5770194+MarkMcCaskey@users.noreply.github.com>
2020-12-15 22:37:41 +00:00
Mark McCaskey
8081aaeee4 Add WasmerEnv: Sync 2020-12-15 13:43:37 -08:00
Mark McCaskey
6a2116917f Fix up tests, make WasmerEnv: Send 2020-12-15 13:35:19 -08:00
Mark McCaskey
62d15fae36 Merge branch 'master' into fix/host-func-env-memory-leak 2020-12-15 08:37:18 -08:00
bors[bot]
873560e203 Merge #1930
1930: test+doc(c-api) Improve test coverage and documentation of the C API r=Hywan a=Hywan


# Description

This PR improves the test coverage by adding more test cases of the C API. It also largely improve the documentation of the C API by writing more documentation, adding more cross-links, improving navigation and the user-experience.

# Review

- [ ] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Ivan Enderlin <ivan@mnt.io>
2020-12-15 16:20:46 +00:00
Ivan Enderlin
b8712437a4 doc(c-api) Update paste to 1.0 and document macros.
Thanks to https://github.com/dtolnay/paste/pull/48, we can generate
documentation with various tokens. It's so cool. Thanks @dtolnay!
2020-12-15 17:02:47 +01:00
Ivan Enderlin
a4012b7ed2 test+doc(c-api) Start testing and documenting the value module. 2020-12-15 16:50:14 +01:00
Ivan Enderlin
c9a919b88a doc(c-api) Fix a link. 2020-12-15 16:32:11 +01:00
Ivan Enderlin
17a1900c8b feat(c-api) wasm_module_name sets out to {0, NULL} in case of failure. 2020-12-15 16:29:17 +01:00
Ivan Enderlin
778681e8a0 test+doc(c-api) Test and document the wasmer_module_*_name functions. 2020-12-15 16:26:29 +01:00
Ivan Enderlin
fb7ce4ad9a doc(c-api) Specify where examples are for wasm_instance_new. 2020-12-15 16:07:13 +01:00
Ivan Enderlin
7a30c31a6f test+doc(c-api) Add test for wasm_instance_exports. 2020-12-15 15:59:57 +01:00
Ivan Enderlin
e82630b9ec chore(c-api) Update lazy_static. 2020-12-14 16:31:44 +01:00
Ivan Enderlin
95eff687d7 chore(c-api) Update the header files. 2020-12-14 16:31:26 +01:00
Ivan Enderlin
43169dab4c test+doc(c-api) Add test and write documentation of the wat module. 2020-12-14 16:26:26 +01:00
Ivan Enderlin
c136f25271 doc(c-api) Add one more link. 2020-12-14 16:20:21 +01:00
bors[bot]
ae9a5f0a81 Merge #1911
1911: Add support for const function signatures r=MarkMcCaskey a=webmaster128

# Description

`FunctionType` contains variable length vectors and I'm sure there is a good reason for this design. However, it makes creating them a bit annoying since it connot be done in constants. With this PR I propose a representation that uses a tuple of arrays, which can be converted into `FunctionType` on demand. This allows developers to use constant signatures and push them to a better place in their code.

In https://github.com/CosmWasm/cosmwasm/pull/659/files you see a demonstration of how this deduplicates code and pushes the definitions out of my way.

Since the conversion `&FunctionType` to `FunctionType` is implemented here, this should no be breaking anyone's code. In cases where you can pass an owned `FunctionType` instead of `&FunctionType` you save one clone.

# Review

- [x] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Simon Warta <simon@warta.it>
2020-12-14 15:17:10 +00:00
Ivan Enderlin
13d5ae5075 doc(c-api) Improve the documentation of the version module. 2020-12-14 16:17:04 +01:00
Ivan Enderlin
4eb4ae95e1 doc(c-api) Write small documentation for the macros module. 2020-12-14 16:11:33 +01:00
Ivan Enderlin
d2c50f9a81 test+doc(c-api) Add tests and write documentation of the store module. 2020-12-14 16:09:00 +01:00
Ivan Enderlin
cce13c7481 doc(c-api) Fix a typo. 2020-12-14 16:08:41 +01:00
Ivan Enderlin
b2564432d3 test+doc(c-api) Improve the documentation and test of the module module. 2020-12-14 15:58:24 +01:00
Ivan Enderlin
bb9144c20f test+doc(c-api) Add more tests and improve documentation. 2020-12-14 15:48:15 +01:00
Ivan Enderlin
3079fc8e05 doc(c-api) Improve the documentation of the wasm_c_api module. 2020-12-14 15:28:50 +01:00
Ivan Enderlin
4558b8739d doc(c-api) Complete or improve the documentation of the engine module. 2020-12-14 15:28:33 +01:00
Ivan Enderlin
c8810096f8 test+doc(c-api) Add a complete test for errors + improve the documentation. 2020-12-14 15:15:11 +01:00
Ivan Enderlin
c20261fe57 doc(c-api) Improve the crate's documentation. 2020-12-14 15:14:54 +01:00
Ivan Enderlin
b045b415f6 chore(c-api) Update the header files. 2020-12-14 13:42:29 +01:00
Ivan Enderlin
f4e3f2a627 feat(c-api) Add wasmer_version_(major,minor,patch,pre) functions. 2020-12-14 13:42:08 +01:00
Simon Warta
8a8e8dc981 Avoid unnecessary &&wasmer::FunctionType 2020-12-14 13:32:42 +01:00
Ivan Enderlin
f75eb29620 chore(c-api) Update the header files. 2020-12-14 11:17:46 +01:00
Ivan Enderlin
3a8a0d3ed9 feat(c-api) Implement the wasmer_version function.
When the `.h` files aren't accessible, it is useful to get a function
to retrieve the version of the Wasmer C API.
2020-12-14 11:13:55 +01:00
Ivan Enderlin
7f085e3e42 Merge branch 'master' into feat-c-api-version 2020-12-14 10:31:57 +01:00
Mark McCaskey
f798f34eef Merge branch 'master' into fix/host-func-env-memory-leak 2020-12-11 17:22:08 -08:00
bors[bot]
0bfc7a3714 Merge #1919
1919: test(c-api) Remove a useless test and update `inline-c` r=Hywan a=Hywan

# Description

Small clean up. This PR removes a duplicated test, and update `inline-c`.

# Review

- [ ] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Ivan Enderlin <ivan@mnt.io>
2020-12-11 10:16:19 +00:00
Ivan Enderlin
2ce2c9c7d5 feat(c-api) Add the WASMER_VERSION_{MAJOR|MINOR|PATCH|PRE} constants in C. 2020-12-11 11:03:01 +01:00
Ivan Enderlin
fdeb4a6845 feat(c-api) Add the WASMER_VERSION constant in C. 2020-12-11 10:51:40 +01:00
Ivan Enderlin
18f388df9a Merge branch 'master' into feat-c-api-version 2020-12-11 10:35:26 +01:00
Ivan Enderlin
d6d9e4edf5 chore(c-api) Update the Makefile to remove a test. 2020-12-11 10:10:09 +01:00
Ivan Enderlin
ce5b7900f1 chore(c-api) Update inline-c to 0.1.4. 2020-12-11 10:08:25 +01:00
Ivan Enderlin
042e6ffa73 test(c-api) This is already a unit test in the wat module. 2020-12-11 10:06:34 +01:00
bors[bot]
4f174f864a Merge #1851
1851: test+doc(c-api): Test and document the C A PI r=Hywan a=Hywan

# Description

This PR improves the test suites and the documentation of the C API.

# Review

- [x] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Ivan Enderlin <ivan@mnt.io>
Co-authored-by: jubianchi <julien@wasmer.io>
2020-12-11 09:01:38 +00:00
jubianchi
62fa2e506e chore: update wamser_wasm.h 2020-12-10 18:42:41 +01:00
jubianchi
401b9e4db5 test(c-api) Add no_run to engine tests.
Because we test the C API with many features combination, we can't ensure tests will pass with every combination
2020-12-10 18:42:01 +01:00
Ivan Enderlin
90778f6d66 test(c-api) Change ignore to no_run. 2020-12-10 17:14:16 +01:00
Ivan Enderlin
685ef32c29 chore(c-api) Update the header files. 2020-12-10 17:08:32 +01:00