• binji's avatar
    Fix cluster-fuzz regression when getting message from Worker · 28b0129b
    binji authored
    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
    
    Review URL: https://codereview.chromium.org/1208733002
    
    Cr-Commit-Position: refs/heads/master@{#29306}
    28b0129b
d8-worker.js 4.49 KB