Skip to content
  • Yuta Saito's avatar
    c1fc1a00
    [wasm] Fix Asyncify loop exit condition for normal return (#9007) · c1fc1a00
    Yuta Saito authored
    [wasm] Fix Asyncify loop exit condition for normal return
    
    Stop calling `asyncify_stop_unwind` when the main function returns
    without any unwinding. In the era when Asyncify buffers were allocated
    on the stack, the `top` and `end` fields were remained in the stack
    space even after the main function returned, so buffer-overflow check in
    the `asyncify_stop_unwind` function passed. But now, the `top` and `end`
    fields are part of the jump buffer allocated on the heap and they are
    deallocated with `free` when the corresponding VM tag is popped. So, the
    buffer-overflow check in the `asyncify_stop_unwind` function failed when
    the main fuction returned without any unwinding, and we have to break
    the asyncify loop before calling `asyncify_stop_unwind`.
    
    Related commit: https://github.com/ruby/ruby.wasm/commit/bc46b12b127e4b6625a100f373504ed5ea45ae66
    c1fc1a00
    [wasm] Fix Asyncify loop exit condition for normal return (#9007)
    Yuta Saito authored
    [wasm] Fix Asyncify loop exit condition for normal return
    
    Stop calling `asyncify_stop_unwind` when the main function returns
    without any unwinding. In the era when Asyncify buffers were allocated
    on the stack, the `top` and `end` fields were remained in the stack
    space even after the main function returned, so buffer-overflow check in
    the `asyncify_stop_unwind` function passed. But now, the `top` and `end`
    fields are part of the jump buffer allocated on the heap and they are
    deallocated with `free` when the corresponding VM tag is popped. So, the
    buffer-overflow check in the `asyncify_stop_unwind` function failed when
    the main fuction returned without any unwinding, and we have to break
    the asyncify loop before calling `asyncify_stop_unwind`.
    
    Related commit: https://github.com/ruby/ruby.wasm/commit/bc46b12b127e4b6625a100f373504ed5ea45ae66
Loading