Skip to content

Commit

Permalink
Merge #2805 #2806
Browse files Browse the repository at this point in the history
2805: Enable `experimental-io-devices` by default r=Amanieu a=Amanieu

Fixes #2695

2806: Fix drop order for Module fields r=Amanieu a=Amanieu

The field ordering here is actually significant because of the drop
order: we want to drop the artifact before dropping the engine.

The reason for this is that dropping the Artifact will de-register the
trap handling metadata from the global registry. This must be done before
the code memory for the artifact is freed (which happens when the store
is dropped) since there is a chance that this memory could be reused by
another module which will try to register its own trap information.

Note that in Rust, the drop order for struct fields is from top to
bottom: the opposite of C++.

In the future, this code should be refactored to properly describe the
ownership of the code and its metadata.

Fixes #2434


Co-authored-by: Amanieu d'Antras <amanieu@gmail.com>
Co-authored-by: ptitSeb <sebastien.chev@gmail.com>
  • Loading branch information
3 people committed Feb 25, 2022
3 parents 56ca2b6 + a54444a + 9c72853 commit 82c24e9
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 2 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/lint.yaml
Expand Up @@ -28,6 +28,10 @@ jobs:
tar xf /opt/llvm.tar.xz --strip-components=1 -C /opt/llvm-12
echo '/opt/llvm-12/bin' >> $GITHUB_PATH
echo 'LLVM_SYS_120_PREFIX=/opt/llvm-12' >> $GITHUB_ENV
- name: Install dependencies on Linux
run: |
sudo apt-get update -y
sudo apt-get install -y libwayland-cursor0 libxkbcommon-dev libwayland-dev
- run: make lint
env:
ENABLE_CRANELIFT: "1"
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/test-sys.yaml
Expand Up @@ -104,10 +104,15 @@ jobs:
sudo apt-get update -y
sudo apt-get install -y --allow-downgrades libstdc++6=8.4.0-1ubuntu1~18.04
sudo apt-get install --reinstall g++-8
- name: Install dependencies on Linux
if: matrix.build == 'linux-x64'
run: |
sudo apt-get update -y
sudo apt-get install -y libwayland-cursor0 libxkbcommon-dev libwayland-dev
- name: Set up base deps on musl
if: matrix.build == 'linux-musl-x64'
run: |
apk add build-base musl-dev curl make libtool libffi-dev gcc automake autoconf git openssl-dev g++
apk add build-base musl-dev curl make libtool libffi-dev gcc automake autoconf git openssl-dev g++ libxkbcommon-dev wayland-dev
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
Expand Down
16 changes: 15 additions & 1 deletion lib/api/src/sys/module.rs
Expand Up @@ -34,8 +34,22 @@ pub enum IoCompileError {
/// contents rather than a deep copy.
#[derive(Clone, MemoryUsage)]
pub struct Module {
store: Store,
// The field ordering here is actually significant because of the drop
// order: we want to drop the artifact before dropping the engine.
//
// The reason for this is that dropping the Artifact will de-register the
// trap handling metadata from the global registry. This must be done before
// the code memory for the artifact is freed (which happens when the store
// is dropped) since there is a chance that this memory could be reused by
// another module which will try to register its own trap information.
//
// Note that in Rust, the drop order for struct fields is from top to
// bottom: the opposite of C++.
//
// In the future, this code should be refactored to properly describe the
// ownership of the code and its metadata.
artifact: Arc<dyn Artifact>,
store: Store,
}

impl Module {
Expand Down
1 change: 1 addition & 0 deletions lib/cli/Cargo.toml
Expand Up @@ -70,6 +70,7 @@ default = [
"cache",
"wasi",
"emscripten",
"experimental-io-devices",
]
engine = []
universal = [
Expand Down

0 comments on commit 82c24e9

Please sign in to comment.