DescriptionFix cluster-fuzz regression when getting message from Worker
The issue is that Worker.prototype.terminate was deleting the C++ Worker
object, and then Worker.prototype.getMessage was trying to read messages from
the queue.
The simplest solution is to keep workers in a zombie state when they have been
terminated. They won't be reaped until Shell::CleanupWorkers is called.
I've also fixed some threading issues with Workers:
* Workers can be created by another Worker, so the Shell::workers_ variable
must be protected by a mutex.
* An individual Worker can typically only be accessed by the isolate that
created it, but the main thread can always terminate it, so the Worker::state_
must be accessed in a thread-safe way.
BUG=chromium:504136
R=jochen@chromium.org
LOG=n
Committed: https://crrev.com/28b0129b03b50d0b29fc3c45452aced2f8bcbaf6
Cr-Commit-Position: refs/heads/master@{#29306}
Patch Set 1 #Patch Set 2 : don't remove Worker from workers_ on terminate #
Messages
Total messages: 6 (1 generated)
|