On Fri, 14 May 2021 07:14:07 GMT, Ralf Schmelter <rschmel...@openjdk.org> wrote:
>> This fixes a race condition in the CompressionBackend class of the heap dump >> code. >> >> The race happens when the thread iterating the heap wants to write the data >> it has collected. If the compression backend has worker threads, the buffer >> to write would just be added to a queue and the worker threads would then >> compress (if needed) and write the buffer. But if no worker threads are >> present, the thread doing the iteration must do this itself. >> >> The iterating thread checks the _nr_of_threads member under lock protection >> and if it is 0, it assume it would have to do the work itself. It then >> releases the lock and enters the loop of the worker threads for one round. >> But after the lock has been released, a worker thread could be registered >> and handle the buffer itself. Then the iterating thread would wait until >> another buffer is available, which will never happen. >> >> The fix is to take the buffer to write out of the queue in the iterating >> thread under lock protection and the do the unlocking. > > Ralf Schmelter has updated the pull request with a new target base due to a > merge or a rebase. The incremental webrev excludes the unrelated changes > brought in by the merge/rebase. The pull request contains six additional > commits since the last revision: > > - Simplify thread_loop() > - Merge branch 'master' of https://github.com/openjdk/jdk into JDK-8255661 > - Merge branch 'master' of https://github.com/openjdk/jdk into JDK-8255661 > - Fix punctuation > - Simplify code > - Fix race in heap dump compression backend LGTM 👍 ------------- Marked as reviewed by rrich (Reviewer). PR: https://git.openjdk.java.net/jdk/pull/3628