[wasm] Decouple background compile jobs from NativeModule
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: Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#59020}
Showing
This diff is collapsed.
Please
register
or
sign in
to comment