8212795: ThreadInfoCompositeData.toCompositeData fails to map ThreadInfo to CompositeData

Reviewed-by: dfuchs
This commit is contained in:
Mandy Chung 2018-10-25 10:57:42 -07:00
parent 85598bc90f
commit d523a17e80
5 changed files with 85 additions and 126 deletions

View file

@ -26,6 +26,8 @@
package sun.management;
import java.lang.management.MonitorInfo;
import java.util.HashMap;
import java.util.Map;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;
@ -54,31 +56,18 @@ public class MonitorInfoCompositeData extends LazyCompositeData {
}
protected CompositeData getCompositeData() {
// CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH
// MONITOR_INFO_ATTRIBUTES!
int len = MONITOR_INFO_ATTRIBUTES.length;
Object[] values = new Object[len];
CompositeData li = LockInfoCompositeData.toCompositeData(lock);
for (int i = 0; i < len; i++) {
String item = MONITOR_INFO_ATTRIBUTES[i];
if (item.equals(LOCKED_STACK_FRAME)) {
StackTraceElement ste = lock.getLockedStackFrame();
values[i] = (ste != null ? StackTraceElementCompositeData.
toCompositeData(ste)
: null);
} else if (item.equals(LOCKED_STACK_DEPTH)) {
values[i] = lock.getLockedStackDepth();
} else {
values[i] = li.get(item);
}
}
StackTraceElement ste = lock.getLockedStackFrame();
CompositeData steCData = ste != null ? StackTraceElementCompositeData.toCompositeData(ste)
: null;
// values may be null; can't use Map.of
Map<String,Object> items = new HashMap<>();
items.put(CLASS_NAME, lock.getClassName());
items.put(IDENTITY_HASH_CODE, lock.getIdentityHashCode());
items.put(LOCKED_STACK_FRAME, steCData);
items.put(LOCKED_STACK_DEPTH, lock.getLockedStackDepth());
try {
return new CompositeDataSupport(MONITOR_INFO_COMPOSITE_TYPE,
MONITOR_INFO_ATTRIBUTES,
values);
return new CompositeDataSupport(MONITOR_INFO_COMPOSITE_TYPE, items);
} catch (OpenDataException e) {
// Should never reach here
throw new AssertionError(e);
@ -126,10 +115,6 @@ public class MonitorInfoCompositeData extends LazyCompositeData {
return V6_COMPOSITE_TYPE;
}
static CompositeType compositeType() {
return MONITOR_INFO_COMPOSITE_TYPE;
}
public static String getClassName(CompositeData cd) {
return getString(cd, CLASS_NAME);
}