On Thu, 22 Apr 2021 14:16:21 GMT, Ralf Schmelter <[email protected]> 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.

This pull request has now been integrated.

Changeset: a29612ea
Author:    Ralf Schmelter <[email protected]>
URL:       
https://git.openjdk.java.net/jdk/commit/a29612ea9998a8e45f25add7ae30bfbc62ce3756
Stats:     51 lines in 3 files changed: 15 ins; 24 del; 12 mod

8255661: TestHeapDumpOnOutOfMemoryError fails with EOFException

Reviewed-by: rrich, cjplummer

-------------

PR: https://git.openjdk.java.net/jdk/pull/3628

Reply via email to