Repository navigation
fix(ir): preserve receive resumption in after bodies - #41
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A receive nested directly in an after body must wait independently and preserve earlier values, as on BEAM.
What changed
Before and after
Before: The reported probe corrupted an earlier atom and completed a requested 500 ms inner timeout in 10 ms.
After: The probe receives the delayed message and completes the 500 ms inner timeout in 510 ms, matching BEAM behavior.
This changes compiled program behavior, not a graphical view; native and BEAM output provide the evidence.
Checked
Live validation: Demonstrated for this version. 3 of 3 scenarios driven live in the product.
How it was checked
Built the runtime before the compiler with cargo build --release --locked -p nera-runtime and cargo build --release --locked -p nera.
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked --no-fail-fast: 2,168 passed, zero failed, one ignored.
./target/release/nera test -j 1 --timeout 30: 490 passed, zero failed, two external-module skips.
python3 scripts/test-allocator-config.py and python3 scripts/test-stacktrace-order.py passed.
python3 scripts/test-native-timer.py passed all default/single-scheduler and normal/utility/background configurations. Background-priority tail lateness reached 113.78 ms; this probe does not establish maximum latency.
The unchanged tests/receive_nested_after.erl passed ten sequential executions per mode with exact output, normal exit and no stderr, including its completion marker.
The complete gate was rerun after bringing in the default branch's test-storage update. Receive lowering and runtime behavior were unchanged by that update.
Local execution covered macOS arm64 and BEAM OTP 29, not native Linux or Windows.
Risk
Risk: low in every dimension.
Full risk assessment
Pipeline
Updates from git push no-mistakes
Infinitary checked this version: an independent review that also judged the documents, and live validation the review accepted.