Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
6ac12ed
Implement continuation_switch prototype
zebreus Nov 13, 2025
ca770c5
Rename continuations to WASIX context switching API
zebreus Nov 14, 2025
83f62ea
Use unambigous name context for the WASIX context switching API
zebreus Nov 17, 2025
f9d4b55
Cleanup WASIX context switching api
zebreus Nov 17, 2025
bb70296
Continue cleaning up
zebreus Nov 18, 2025
eac75be
Add error type to spawn_local
zebreus Nov 18, 2025
3da8e77
Refactor ThreadLocalExecutor to not use a thread-local DashMap
zebreus Nov 18, 2025
4bed1e6
Refactor local_spawn to use an Rc instead of an Arc
zebreus Nov 18, 2025
9e85d96
Further simplify ThreadLocalExecutor
zebreus Nov 18, 2025
9c41830
Move ThreadLocalExecutor to utils
zebreus Nov 18, 2025
4b44b57
Move call function to exec
zebreus Nov 18, 2025
06cd7a5
Switch wasix context to use DashMap for tracking contexts
zebreus Nov 18, 2025
13b506f
Implement context_delete
zebreus Nov 18, 2025
05f1704
Improve handling of contexts returning a value
zebreus Nov 18, 2025
7f81a61
Split context functions into multiple files
zebreus Nov 18, 2025
6ff430d
Improve error handling in context_switch
zebreus Nov 18, 2025
f9081be
Cleanup error handling in context_new
zebreus Nov 18, 2025
b321d81
Add comments explaining the individual steps in the context switching…
zebreus Nov 19, 2025
97751c5
Always access current_context_id with relaxed ordering
zebreus Nov 19, 2025
0a86147
Only set the context id in the switched to context
zebreus Nov 20, 2025
b34f916
Fix race condition in context_switch
zebreus Nov 20, 2025
62dad92
Implement cancellations for contexts
zebreus Nov 21, 2025
0cdfcd2
Move all context switching state into one struct
zebreus Nov 21, 2025
1937829
Move context switching logic to the context switching module
zebreus Nov 24, 2025
35e8c28
Move remaining spawner interaction to context_switching
zebreus Nov 24, 2025
cb46f97
Move more logic to context_switching
zebreus Nov 24, 2025
5cc609a
Move context id management into context_switching
zebreus Nov 24, 2025
bc2e69e
Move Arc into ContextSwitchingContext
zebreus Nov 24, 2025
47d192f
Move new context cancellation logic to context_switching
zebreus Nov 24, 2025
02d3e4c
Move all context cancelation handling to context_switching
zebreus Nov 24, 2025
0a2a08f
Clean up context_switch
zebreus Nov 24, 2025
89805c4
Remove unnecessary Arc around context switching context
zebreus Nov 24, 2025
acec740
Move context switching entrypoint to context_switching
zebreus Nov 24, 2025
1fbefb2
Replace the main context ID magic number with a constant
zebreus Nov 24, 2025
76b0f44
Add WASIX test for context switching
zebreus Nov 24, 2025
cabd70d
Make thread_spawn work with contexts
zebreus Nov 24, 2025
667c070
Wrap call to initialize in run_exec in contexts
zebreus Nov 24, 2025
e173c68
Move one more call to _initialize to run in the main context
zebreus Nov 24, 2025
ce2080b
Remove unused imports
zebreus Nov 24, 2025
cf01013
Add more wasixcc based switching tests
zebreus Nov 25, 2025
3ee0609
Rename context new/delete to create/destroy
zebreus Nov 25, 2025
6472a5e
Update context-switching tests to the new names
zebreus Nov 25, 2025
221a47f
Add todo for moving the context switching file
zebreus Nov 28, 2025
2f95154
Adjust context_switch for the changed async API
zebreus Nov 28, 2025
963dba7
Adjust context_create for the changed API
zebreus Nov 28, 2025
ba84494
Adjust WASIX context switching to work with the real wasmer async api
zebreus Dec 1, 2025
66b89fb
Add todo to remind me of adding a proper error type for returning con…
zebreus Dec 1, 2025
2b7f2d4
Fix deadlocks
zebreus Dec 1, 2025
876dc15
Fix context switching tests
zebreus Dec 1, 2025
b8f2c77
Add more tests for context switching
zebreus Dec 1, 2025
d096b25
Add even more context switching tests
zebreus Dec 1, 2025
66045b3
Add even more tests including one that triggers an error
zebreus Dec 1, 2025
5e00cf9
Fix hallucinated broken tests
zebreus Dec 1, 2025
739ff1a
Add a short descriptions to the context switching functions
zebreus Dec 1, 2025
5131716
Add two more todo comments for context switching
zebreus Dec 1, 2025
a5d6f02
Add a comment to explain how context deletion is initiated
zebreus Dec 1, 2025
1a81063
Organize imports in context switching functions
zebreus Dec 1, 2025
1f6cd81
Clean up context_switch
zebreus Dec 1, 2025
8e593bc
Remove dead code
zebreus Dec 1, 2025
4700fe2
Document fields in the context-switching environment
zebreus Dec 1, 2025
bbd2f54
Rename context switching context to context-switching environment
zebreus Dec 2, 2025
7de15fb
Light refactoring in context_switching
zebreus Dec 2, 2025
4e0a1a1
Add more comments in context_switching
zebreus Dec 2, 2025
48ef372
Fix clippy lints
zebreus Dec 2, 2025
3497791
Define how to handle error cases during context switching
zebreus Dec 2, 2025
473915f
Properly define behaviour in edgecases where the executor outlives th…
zebreus Dec 2, 2025
0601815
Fix remaining TODO comment in context_switching
zebreus Dec 2, 2025
0121d72
Move context-switching environment into a better location
zebreus Dec 2, 2025
b7ae9e5
Fix unsafe conversion from TypedFunction into Function
zebreus Dec 2, 2025
a116748
Remove do_pending_operations from context_switch
zebreus Dec 2, 2025
21882f7
Add a note that _initialize for the main module and it's shared libs …
zebreus Dec 2, 2025
6d06ed1
Remove useless TODO
zebreus Dec 2, 2025
0682bfa
Use a typed function as the entrypoint when creating a new context
zebreus Dec 2, 2025
0b802a0
Remove resolved TODO comment in context_create
zebreus Dec 2, 2025
a0831c6
Make sure Senders never leave ContextSwitchingEnvironment
zebreus Dec 2, 2025
32b7778
Handle context entrypoint functions returning
zebreus Dec 2, 2025
f21b949
Add do_pending_operations to context_switch
zebreus Dec 3, 2025
e95354d
Improve context-switching trace messages
zebreus Dec 4, 2025
f0f3126
Add support for engines not supporting async execution
zebreus Dec 5, 2025
22452b2
Rename the functions of context_switching
zebreus Dec 5, 2025
ab0fadf
Refactor getting the unblocker in switch_context
zebreus Dec 5, 2025
62239e9
Replace the again errors with not supported errors
zebreus Dec 5, 2025
0e42468
Change error message
zebreus Dec 5, 2025
29c8b73
Change entrypoint to untyped function
zebreus Dec 8, 2025
92dd61c
Add assertions to prevent context switching to be used in combination…
zebreus Dec 8, 2025
8c49e89
Make all tests pass with node api
syrusakbary Dec 9, 2025
981a041
Add context switching for forked processes
zebreus Dec 8, 2025
9f4608d
Support process_fork with context switching
zebreus Dec 9, 2025
51dfecf
Improve handling of undefined behaviour when vfork traps
zebreus Dec 9, 2025
4f306b4
Change expected behaviour for a test to failing
zebreus Dec 9, 2025
5748a24
Fix clippy lints
zebreus Dec 9, 2025
6f4ff40
Disable context switching tests until wasixcc supports it and is avai…
zebreus Dec 9, 2025
d62fa0a
Add context switching tests to the WASIX tests
zebreus Dec 10, 2025
6da0f7f
Update WASIX sysroot release
zebreus Dec 10, 2025
051f762
Allow undefined behaviour test to pass
zebreus Dec 10, 2025
cef1e67
Make preconditions for run_main_context more strict
zebreus Dec 10, 2025
e8f7562
Add wasixcc install to unit tests
zebreus Dec 11, 2025
64ae9a3
Reenable wasixcc based unit tests
zebreus Dec 11, 2025
6f904be
Try wasixcc install on musl linux
zebreus Dec 11, 2025
12a9e40
Remove duplicate tests
zebreus Dec 11, 2025
1fe0a5b
Disable context-switching test that only works with eh
zebreus Dec 12, 2025
36753dd
Enable wasixcc based tests on all unix targets
zebreus Dec 12, 2025
0265c96
Update wasixcc version in tests
zebreus Dec 12, 2025
206a35c
Adjust wasixcc install in CI
zebreus Dec 12, 2025
d741909
Prevent process forking if a vfork is already active
zebreus Dec 12, 2025
b31403d
Add a test to ensure nested vforks are not allowed
zebreus Dec 12, 2025
6de9324
Adjust resume_context to also use the ContextSwitchingEnvironment ent…
zebreus Dec 12, 2025
d41ec07
Add comment to justify usage of run_main_context
zebreus Dec 12, 2025
a363d4c
Add a warning about potential memory usage to destroy_context
zebreus Dec 12, 2025
15b69b1
Fix warning in context_create
zebreus Dec 12, 2025
2e7d73b
Fix comment in context_destroy
zebreus Dec 12, 2025
dddae2c
Add todo to remove the arc from ContextSwitchingEnvironment
zebreus Dec 12, 2025
3764871
Fix test runner for context switching tests
zebreus Dec 12, 2025
dd6166a
Speed up wasixcc install
zebreus Dec 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 7 additions & 28 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -174,34 +174,8 @@ jobs:
sudo apt-get update
sudo apt-get install -y git make lld curl

- name: Download binaryen
uses: dsaltares/[email protected]
with:
repo: WebAssembly/binaryen
version: tags/version_123
file: binaryen-version_123-x86_64-linux.tar.gz
target: binaryen/binaryen.tar.gz

- name: Unpack binaryen
run: |
tar -xf binaryen/binaryen.tar.gz -C binaryen --strip-components=1
chmod +x binaryen/bin/*
export BINARYEN_DIR=$(pwd)/binaryen
echo "$BINARYEN_DIR/bin" >> $GITHUB_PATH

- name: Install wasixcc, sysroot and LLVM
run: |
export RUST_LOG=wasixcc=trace
export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}
rustup toolchain install 1.90 --profile minimal --no-self-update
cargo +1.90 install wasixcc -F bin
mkdir wasixcc-install
wasixcc --install-executables ./wasixcc-install
echo "$(pwd)/wasixcc-install" >> $GITHUB_PATH
mkdir -p ~/.wasixcc/llvm
mkdir -p ~/.wasixcc/sysroot
wasixcc --download-sysroot v2025-11-06.1
wasixcc --download-llvm
- name: Install wasixcc
uses: wasix-org/wasixcc

- name: Tool versions
run: |
Expand Down Expand Up @@ -896,6 +870,11 @@ jobs:
run: |
brew install llvm
echo "/opt/homebrew/opt/llvm/bin" >> GITHUB_PATH

- name: Install wasixcc
if: matrix.metadata.build != 'windows-x64'
uses: wasix-org/wasixcc

- name: Install LLVM
shell: bash
if: matrix.metadata.llvm_url
Expand Down
2 changes: 1 addition & 1 deletion lib/api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ sys = ["std", "dep:wasmer-vm", "dep:wasmer-compiler"]
sys-default = ["sys", "wat", "cranelift"]

# Experimental concurrent execution support
experimental-async = ["sys", "dep:futures", "dep:corosensei"]
experimental-async = ["dep:futures", "dep:corosensei"]

# - Compilers.
compiler = [
Expand Down
10 changes: 10 additions & 0 deletions lib/api/src/entities/engine/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -255,4 +255,14 @@ impl Engine {
_ => Ok(()),
}
}

#[cfg(feature = "experimental-async")]
/// Returns true if the engine supports async operations.
pub fn supports_async(&self) -> bool {
match self.be {
#[cfg(feature = "sys")]
BackendEngine::Sys(ref e) => true,
_ => false,
}
}
}
5 changes: 3 additions & 2 deletions lib/wasix/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ wasmer-wasix-types = { path = "../wasi-types", version = "0.601.0", features = [
"enable-serde",
] }
wasmer-types = { path = "../types", version = "=6.1.0", default-features = false }
wasmer = { path = "../api", version = "=6.1.0", default-features = false }
wasmer = { path = "../api", version = "=6.1.0", default-features = false, features = [
"experimental-async",
] }
virtual-mio = { path = "../virtual-io", version = "0.601.0", default-features = false }
virtual-fs = { path = "../virtual-fs", version = "0.601.0", default-features = false, features = [
"webc-fs",
Expand Down Expand Up @@ -221,7 +223,6 @@ sys = [
"ctrlc",
"wasmer/wat",
"wasmer/js-serializable-module",
"wasmer/experimental-async",
]
sys-default = ["sys", "wasmer/sys"]
sys-poll = []
Expand Down
Loading