@@ -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