@@ -89,17 +89,32 @@ public MonitoredNumbersResponse createThreadMonitoredDataResponse() {
89
89
byte [] explicitStates = new byte [events .size ()];
90
90
int [] explicitThreads = new int [events .size ()];
91
91
long [] explicitTimeStamps = new long [events .size ()];
92
+ int ePos = 0 ;
92
93
for (int i = 0 ; i < events .size (); i ++) {
93
94
JFREvent te = events .get (i );
94
- explicitStates [i ] = te .status ;
95
- explicitThreads [i ] = (int ) te .threadId ;
96
- explicitTimeStamps [i ] = te .timeStamp ;
97
95
if (te .status == CommonConstants .THREAD_STATUS_ZOMBIE ) {
98
- threadIdSet .remove (te .threadId );
96
+ if (!threadIdSet .remove (te .threadId )) {
97
+ //unknown thread
98
+ continue ;
99
+ }
99
100
}
101
+ explicitStates [ePos ] = te .status ;
102
+ explicitThreads [ePos ] = (int ) te .threadId ;
103
+ explicitTimeStamps [ePos ] = te .timeStamp ;
104
+ ePos ++;
100
105
}
101
106
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
+ }
103
118
}
104
119
return rp ;
105
120
}
0 commit comments