• Clemens Hammacher's avatar
    [wasm] Decouple background compile jobs from NativeModule · 92d9b09c
    Clemens Hammacher authored
    Background compile jobs should not keep the NativeModule alive, for two
    reasons:
    1) We sometimes have to wait for background compilation to finish (from
       a foreground task!). This introduces unnecessary latency.
    2) Giving the background compile tasks shared ownership of the
       NativeModule causes the NativeModule (and the CompilationState) to
       be freed from background tasks, which is error-prone (see
       https://crrev.com/c/1400420).
    
    Instead, this CL introduces a BackgroundCompileToken which is held
    alive by the NativeModule and all background compile jobs. The initial
    and the final phase of compilation (getting and submitting work)
    synchronize on this token to check and ensure that the NativeModule is
    and stays alive. During compilation itself, the mutex is released, such
    that the NativeModule can die.
    The destructor of the NativeModule cancels the BackgroundCompileToken.
    Immediately afterwards, the NativeModule and the CompilationState can
    die.
    
    This change allows to remove two hacks introduced previously: The atomic
    {aborted_} flag and the {FreeCallbacksTask}.
    
    R=mstarzinger@chromium.org
    CC=titzer@chromium.org
    
    Bug: v8:8689, v8:7921
    Change-Id: I42e06eab3c944b0988286f2ce18e3c294535dfb6
    Cq-Include-Trybots: luci.v8.try:v8_linux64_tsan_rel
    Reviewed-on: https://chromium-review.googlesource.com/c/1421364
    Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
    Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#59020}
    92d9b09c
wasm-engine.h 7.88 KB