RFR: JDK-8255661: TestHeapDumpOnOutOfMemoryError fails with EOFException

Ralf Schmelter rschmelter at openjdk.java.net
Tue Apr 27 14:43:48 UTC 2021


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.

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

Commit messages:
 - Fix punctuation
 - Simplify code
 - Fix race in heap dump compression backend

Changes: https://git.openjdk.java.net/jdk/pull/3628/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3628&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8255661
  Stats: 33 lines in 3 files changed: 11 ins; 14 del; 8 mod
  Patch: https://git.openjdk.java.net/jdk/pull/3628.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/3628/head:pull/3628

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


More information about the hotspot-runtime-dev mailing list