Skip to content

Fix Redline native memory growth, atomics, wait/notify and traps - #232

Open
andreaTP wants to merge 1 commit into
bytecodealliance:mainfrom
andreaTP:redline-native-memory-fixes
Open

andreaTP wants to merge 1 commit into
bytecodealliance:mainfrom
andreaTP:redline-native-memory-fixes

Conversation

@andreaTP

@andreaTP andreaTP commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Follow-up to the review of #230. Both native memories, Panama and JFFI, get the same fixes:

  • an initial size over RUNTIME_MAX_PAGES is rejected instead of being mapped past the reservation, into a neighbouring mapping
  • grow() is synchronized and the memory view is volatile, so concurrent grows can't hand out the same page and host readers see the current size
  • running guest code sees growth by another instance sharing the memory, through a page count the memory owns, and growth by a host import
  • host atomics are hardware atomics, so they no longer lose updates against the guest's
  • wait/notify get the Runtime: fix lost wakeup from late-arriving atomicWaitBroken wait notify #107 lost-wakeup fix and throw WasmInterruptedException when interrupted
  • a trap recorded by the runner's Java handler (memory.init, data.drop, table operations, memory.grow, wait/notify) stops the guest at once
  • a length-0 memory.init on a dropped segment still checks its offsets

The .native format moves to version 3, since compiled code reads a new context slot.

cc. @andreas-karlsson

Follow-up to the review of bytecodealliance#230. Both native memories, Panama and
JFFI, get the same fixes:

- an initial size over RUNTIME_MAX_PAGES is rejected instead of being
  mapped past the reservation, into a neighbouring mapping
- grow() is synchronized and the memory view is volatile, so
  concurrent grows can't hand out the same page and host readers see
  the current size
- running guest code sees growth by another instance sharing the
  memory, through a page count the memory owns, and growth by a host
  import
- host atomics are hardware atomics, so they no longer lose updates
  against the guest's
- wait/notify get the bytecodealliance#107 lost-wakeup fix and throw
  WasmInterruptedException when interrupted
- a trap recorded by the runner's Java handler (memory.init, data.drop,
  table operations, memory.grow, wait/notify) stops the guest at once
- a length-0 memory.init on a dropped segment still checks its offsets

The .native format moves to version 3, since compiled code reads a new
context slot.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant