diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/ChunkHeader.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/ChunkHeader.java index 94f69eaff2f..3be4e0162f9 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/ChunkHeader.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/ChunkHeader.java @@ -158,8 +158,18 @@ public void refresh() throws IOException { Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.INFO, "Chunk: finalChunk=" + finalChunk); absoluteChunkEnd = absoluteChunkStart + chunkSize; return; - } else if (finished) { - throw new IOException("No metadata event found in finished chunk."); + } else { + if (finished) { + throw new IOException("No metadata event found in finished chunk."); + } + if (chunkSize == HEADER_SIZE) { + // This ensures that a non-streaming parser is able + // to break out of the loop in case the file is + // ended before the first metadata event has + // been written. This can happen during a failed crash + // dump. + input.pollWait(); + } } } }