Skip to content

Commit 3fbc5d5

Browse files
committed
improved handling of THREAD_STATUS_ZOMBIE state
1 parent 9200f7c commit 3fbc5d5

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

plugins/jfr.streaming/src/org/graalvm/visualvm/jfr/streaming/JFRThreadDataProvider.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,32 @@ public MonitoredNumbersResponse createThreadMonitoredDataResponse() {
8989
byte[] explicitStates = new byte[events.size()];
9090
int[] explicitThreads = new int[events.size()];
9191
long[] explicitTimeStamps = new long[events.size()];
92+
int ePos = 0;
9293
for (int i = 0; i < events.size(); i++) {
9394
JFREvent te = events.get(i);
94-
explicitStates[i] = te.status;
95-
explicitThreads[i] = (int) te.threadId;
96-
explicitTimeStamps[i] = te.timeStamp;
9795
if (te.status == CommonConstants.THREAD_STATUS_ZOMBIE) {
98-
threadIdSet.remove(te.threadId);
96+
if (!threadIdSet.remove(te.threadId)) {
97+
//unknown thread
98+
continue;
99+
}
99100
}
101+
explicitStates[ePos] = te.status;
102+
explicitThreads[ePos] = (int) te.threadId;
103+
explicitTimeStamps[ePos] = te.timeStamp;
104+
ePos++;
100105
}
101106
events.clear();
102-
rp.setExplicitDataOnThreads(explicitThreads, explicitStates, explicitTimeStamps);
107+
if (ePos < explicitStates.length) {
108+
byte[] msgExplicitStates = new byte[ePos];
109+
System.arraycopy(explicitStates, 0, msgExplicitStates, 0, ePos);
110+
int[] msgExplicitThreads = new int[ePos];
111+
System.arraycopy(explicitThreads, 0, msgExplicitThreads, 0, ePos);
112+
long[] msgExplicitTimeStamps = new long[ePos];
113+
System.arraycopy(explicitTimeStamps, 0, msgExplicitTimeStamps, 0, ePos);
114+
rp.setExplicitDataOnThreads(msgExplicitThreads, msgExplicitStates, msgExplicitTimeStamps);
115+
} else {
116+
rp.setExplicitDataOnThreads(explicitThreads, explicitStates, explicitTimeStamps);
117+
}
103118
}
104119
return rp;
105120
}

0 commit comments

Comments
 (0)