Integrated: JDK-8255661: TestHeapDumpOnOutOfMemoryError fails with EOFException

Ralf Schmelter rschmelter at openjdk.java.net
Mon May 17 11:50:43 UTC 2021


On Thu, 22 Apr 2021 14:16:21 GMT, Ralf Schmelter <rschmelter at 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.

This pull request has now been integrated.

Changeset: a29612ea
Author:    Ralf Schmelter <rschmelter at openjdk.org>
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


More information about the hotspot-runtime-dev mailing list