8000 chore: cherry-pick 6aa1e71fbd09 from v8 by nornagon · Pull Request #26200 · electron/electron · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

chore: cherry-pick 6aa1e71fbd09 from v8 #26200

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to 8000 load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions patches/v8/.patches
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ backport_986051.patch
fix_alreadycalled_checking_in_element_closures.patch
wasm_do_not_log_code_of_functions_whose_module_is_not_fully_loaded.patch
cherry-pick-7e5c7b5964.patch
cherry-pick-6aa1e71fbd09.patch
perf_make_getpositioninfoslow_faster.patch
74 changes: 74 additions & 0 deletions patches/v8/cherry-pick-6aa1e71fbd09.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Andreas Haas <ahaas@chromium.org>
Date: Tue, 25 Aug 2020 11:46:46 +0200
Subject: Merged: [wasm][streaming] Avoid aborting the stream after it finished
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

With WebAssembly streaming compilation it is possible that FinishStream
indirectly calls AbortStream. This had the effect that while
FinishStream fulfilled the promise, AbortStream disposed the promise
by removing the compile job from the wasm engine and thereby deallocated
AsyncCompileJob and all the state that belongs to it. Without that
state, FinishStream could not finish fulfilling the promise correctly.

With this CL the streaming decoder remembers that the stream has
already been finished. When the stream has been finished, all calls to
Abort get ignored.

The regression test for this issue requires the Chrome embedding, see
https://crrev.com/c/2368359

R=​clemensb@chromium.org
NOTRY=true
NOPRESUBMIT=true
NOTREECHECKS=true

(cherry picked from commit 32dd54709cd2ecdfc553aff3f7ab5377ff7c91a2)

Bug: chromium:1117258
Change-Id: Ifc28a1ee38c228b051c4d7d85b305fe2a721fa1f
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2367858
Commit-Queue: Andreas Haas <ahaas@chromium.org>
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#69549}
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465830
Cr-Commit-Position: refs/branch-heads/8.6@{#22}
Cr-Branched-From: a64aed2333abf49e494d2a5ce24bbd14fff19f60-refs/heads/8.6.395@{#1}
Cr-Branched-From: a626bc036236c9bf92ac7b87dc40c9e538b087e3-refs/heads/master@{#69472}

diff --git a/src/wasm/streaming-decoder.cc b/src/wasm/streaming-decoder.cc
index c88a2c77b89be74b21c4e92a9abadea63353ab82..3ec0b154dafc8595b63d21b9d067d2eaf6cd4c0a 100644
--- a/src/wasm/streaming-decoder.cc
+++ b/src/wasm/streaming-decoder.cc
@@ -62,6 +62,8 @@ size_t StreamingDecoder::DecodingState::ReadBytes(StreamingDecoder* streaming,

void StreamingDecoder::Finish() {
TRACE_STREAMING("Finish\n");
+ DCHECK(!stream_finished_);
+ stream_finished_ = true;
if (!ok()) return;

if (deserializing()) {
@@ -101,6 +103,8 @@ void StreamingDecoder::Finish() {

void StreamingDecoder::Abort() {
TRACE_STREAMING("Abort\n");
+ if (stream_finished_) return;
+ stream_finished_ = true;
if (!ok()) return; // Failed already.
processor_->OnAbort();
Fail();
diff --git a/src/wasm/streaming-decoder.h b/src/wasm/streaming-decoder.h
index f3203e702746f090a2e43e4557a1ad5ca68d5ac8..09a75a21f4a6fa0b0fa9b04478dd3dec007a0fbf 100644
--- a/src/wasm/streaming-decoder.h
+++ b/src/wasm/streaming-decoder.h
@@ -272,6 +272,7 @@ class V8_EXPORT_PRIVATE StreamingDecoder {
uint32_t module_offset_ = 0;
size_t total_size_ = 0;
std::string url_;
+ bool stream_finished_ = false;

// Caching support.
ModuleCompiledCallback module_compiled_callback_ = nullptr;
0