• Clemens Hammacher's avatar
    [wasm] Use atomic instead of mutex for error checking · bed304a3
    Clemens Hammacher authored
    Different threads check this flag multiple times per function, and
    currently all of them synchronize on a single mutex. It's not even a
    reader-writer-lock, hence they might block each other just for checking
    whether an error has been set.
    Threads don't rely on precise information here, this is just a check to
    abort early if compilation failed anyway. Also in the current
    implementation, no ordering is guaranteed on this error field.
    
    We can avoid taking the mutex by turning the field into an atomic
    pointer. It will be updated at most once, from nullptr to the first
    error detected. To check whether an error is set, we can even use
    relaxed memory order, since we won't look into the object behind the
    pointer.
    
    R=titzer@chromium.org
    
    Bug: v8:8423
    Change-Id: I71354c8d463a57c219eb21e53136556ae787ebd4
    Cq-Include-Trybots: luci.v8.try:v8_linux64_tsan_rel
    Reviewed-on: https://chromium-review.googlesource.com/c/1375661
    Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
    Reviewed-by: 's avatarBen Titzer <titzer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#58220}
    bed304a3
module-compiler.cc 130 KB