diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index a0a66703b67..07c32a7e599 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -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" diff --git a/.github/workflows/test-sys.yaml b/.github/workflows/test-sys.yaml index 7f3aef17b43..5bf6c867877 100644 --- a/.github/workflows/test-sys.yaml +++ b/.github/workflows/test-sys.yaml @@ -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: diff --git a/lib/api/src/sys/module.rs b/lib/api/src/sys/module.rs index 27df4fd6f31..5f387f1cb39 100644 --- a/lib/api/src/sys/module.rs +++ b/lib/api/src/sys/module.rs @@ -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, + store: Store, } impl Module { diff --git a/lib/cli/Cargo.toml b/lib/cli/Cargo.toml index 8c8a195fa93..33dfe19a398 100644 --- a/lib/cli/Cargo.toml +++ b/lib/cli/Cargo.toml @@ -70,6 +70,7 @@ default = [ "cache", "wasi", "emscripten", + "experimental-io-devices", ] engine = [] universal = [