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

Reply via email to