diff options
author | Andreu Botella <andreu@andreubotella.com> | 2022-03-22 11:33:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-22 11:33:29 +0100 |
commit | 12d28dffc6c8d08e6620751e55d8a382c66443a2 (patch) | |
tree | 9ad9058ec93c39d5b8015d80cd88d1fa4abf14bc /runtime/ops/http.rs | |
parent | c5792d6d1dcd2fe60e59e836015eac4f05a76039 (diff) |
fix(fetch): Fix uncaught rejection panic with `WebAssembly.instantiateStreaming` (#13925)
When an exception is thrown during the processing of streaming WebAssembly,
`op_wasm_streaming_abort` is called. This op calls into V8, which synchronously
rejects the promise and calls into the promise rejection handler, if applicable.
But calling an op borrows the isolate's `JsRuntimeState` for the duration of the
op, which means it is borrowed when V8 calls into `promise_reject_callback`,
which tries to borrow it again, panicking.
This change changes `op_wasm_streaming_abort` from an op to a binding
(`Deno.core.abortWasmStreaming`). Although that binding must borrow the
`JsRuntimeState` in order to access the `WasmStreamingResource` stored in the
`OpTable`, it also takes ownership of that `WasmStreamingResource` instance,
which means it can drop any borrows of the `JsRuntimeState` before calling into
V8.
Diffstat (limited to 'runtime/ops/http.rs')
0 files changed, 0 insertions, 0 deletions