Skip to content

Commit 452f619

Browse files
committed
Add an unknown thread entry to JFR constant pool
This fixes the error of "Size of check point event doesn't match content" while reading a JFR chunk. Signed-off-by: Gengchen Tuo <gengchen.tuo@ibm.com>
1 parent fc778d6 commit 452f619

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

runtime/vm/JFRConstantPoolTypes.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -1235,7 +1235,10 @@ VM_JFRConstantPoolTypes::freeThreadNameEntries(void *entry, void *userData)
12351235
J9VMThread *currentThread = (J9VMThread *)userData;
12361236
PORT_ACCESS_FROM_VMC(currentThread);
12371237

1238-
j9mem_free_memory(tableEntry->javaThreadName);
1238+
/* Name of the unknown thread entry cannot be freed */
1239+
if (0 != tableEntry->index) {
1240+
j9mem_free_memory(tableEntry->javaThreadName);
1241+
}
12391242
tableEntry->javaThreadName = NULL;
12401243

12411244
return FALSE;

runtime/vm/JFRConstantPoolTypes.hpp

+17
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ J9_DECLARE_CONSTANT_UTF8(nativeMethod, "(nativeMethod)");
4545
J9_DECLARE_CONSTANT_UTF8(nativeMethodSignature, "()");
4646
J9_DECLARE_CONSTANT_UTF8(defaultPackage, "(defaultPackage)");
4747
J9_DECLARE_CONSTANT_UTF8(bootLoaderName, "boostrapClassLoader");
48+
J9_DECLARE_CONSTANT_UTF8(unknownThread, "unknown thread");
4849

4950
enum JFRStringConstants {
5051
DefaultString = 0,
@@ -542,6 +543,21 @@ class VM_JFRConstantPoolTypes {
542543
return value;
543544
}
544545

546+
void addUnknownThreadEntry() {
547+
ThreadEntry unknownThreadEntry = {0};
548+
unknownThreadEntry.vmThread = NULL;
549+
unknownThreadEntry.index = 0;
550+
unknownThreadEntry.osTID = 0;
551+
unknownThreadEntry.javaTID = 0;
552+
unknownThreadEntry.javaThreadName = (J9UTF8 *)&unknownThread;
553+
unknownThreadEntry.osThreadName = (J9UTF8 *)&unknownThread;
554+
unknownThreadEntry.threadGroupIndex = 0;
555+
556+
ThreadEntry *entry = (ThreadEntry *)hashTableAdd(_threadTable, &unknownThreadEntry);
557+
_firstThreadEntry = entry;
558+
_previousThreadEntry = entry;
559+
}
560+
545561
protected:
546562

547563
public:
@@ -1276,6 +1292,7 @@ class VM_JFRConstantPoolTypes {
12761292

12771293
/* Leave index 0 as a NULL entry for unknown notifier thread. */
12781294
_threadCount += 1;
1295+
addUnknownThreadEntry();
12791296

12801297
done:
12811298
return;

0 commit comments

Comments
 (0)