Commit 2301ffe7 authored by Andreas Haas's avatar Andreas Haas Committed by Commit Bot

[wasm] Do not restart compilation tasks after compilation failed

This CL fixes a bad interleaving that can happen between the
CompilationState and streaming compilation. In that particular
interleaving, streaming compilation tries to restart compilation tasks
after compilation failed already, which fails with a check in the
CancelableTaskManager. The problem is the following:

The CompilationState notifies the streaming decoder of compilation
errors. After receiving the notification, the streaming decoder
ignores all subsequent incoming bytes. However, the CompilationState
does not notify the streaming decoder directly, it posts a task
which will notify the streaming decoder. This means that between the
failing of compilation and the notification of the streaming decoder
there is a time window in which compilation already failed but the
streaming decoder can still restart compilation tasks. The crash
happened when this time window was hit.

With this CL we check that compilation did not fail before we restart
compilation tasks. I was never able to reproduce this crash, so I don't
really know if this particular issue caused the crash.

R=titzer@chromium.org

Bug: chromium:840713
Change-Id: Ic522b1c21a7d7749c1e7f6097aa450a09fb271cc
Reviewed-on: https://chromium-review.googlesource.com/1075787Reviewed-by: 's avatarBen Titzer <titzer@chromium.org>
Commit-Queue: Andreas Haas <ahaas@chromium.org>
Cr-Commit-Position: refs/heads/master@{#53428}
parent aeb8f324
......@@ -3578,6 +3578,9 @@ void CompilationState::RestartBackgroundTasks(size_t max) {
size_t num_restart;
{
base::LockGuard<base::Mutex> guard(&mutex_);
// No need to restart tasks if compilation already failed.
if (failed_) return;
bool should_increase_workload = allocated_memory_ <= max_memory_ / 2;
if (!should_increase_workload) return;
DCHECK_LE(num_background_tasks_, max_background_tasks_);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment