From b756c93c7c0950f98276d79c9dece866103057d3 Mon Sep 17 00:00:00 2001 From: clanger Date: Mon, 17 Jul 2017 15:46:34 +0200 Subject: [PATCH] 8183123: JDP packets have no processId context set Reviewed-by: dcubed, clanger Contributed-by: andrew_m_leonard@uk.ibm.com --- .../sun/management/jdp/JdpController.java | 21 +++++++------------ .../sun/management/jdp/JdpOnTestCase.java | 4 +++- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java b/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java index f96227ce47..14c45fafe0 100644 --- a/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java +++ b/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,7 @@ import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.lang.UnsupportedOperationException; import sun.management.VMManagement; /** @@ -132,19 +133,11 @@ public final class JdpController { } // Get the process id of the current running Java process - private static Integer getProcessId() { + private static Long getProcessId() { try { - // Get the current process id using a reflection hack - RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); - Field jvm = runtime.getClass().getDeclaredField("jvm"); - jvm.setAccessible(true); - - VMManagement mgmt = (sun.management.VMManagement) jvm.get(runtime); - Method pid_method = mgmt.getClass().getDeclaredMethod("getProcessId"); - pid_method.setAccessible(true); - Integer pid = (Integer) pid_method.invoke(mgmt); - return pid; - } catch(Exception ex) { + // Get the current process id + return ProcessHandle.current().pid(); + } catch(UnsupportedOperationException ex) { return null; } } @@ -206,7 +199,7 @@ public final class JdpController { packet.setBroadcastInterval(Integer.toString(pause)); // Set process id - Integer pid = getProcessId(); + Long pid = getProcessId(); if (pid != null) { packet.setProcessId(pid.toString()); } diff --git a/jdk/test/sun/management/jdp/JdpOnTestCase.java b/jdk/test/sun/management/jdp/JdpOnTestCase.java index 107ca5a939..80abcebc83 100644 --- a/jdk/test/sun/management/jdp/JdpOnTestCase.java +++ b/jdk/test/sun/management/jdp/JdpOnTestCase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,7 @@ import java.net.SocketTimeoutException; import java.util.Map; +import static jdk.testlibrary.Asserts.assertNotEquals; public class JdpOnTestCase extends JdpTestCase { @@ -58,6 +59,7 @@ public class JdpOnTestCase extends JdpTestCase { final String jdpName = payload.get("INSTANCE_NAME"); log.fine("Received correct JDP packet #" + String.valueOf(receivedJDPpackets) + ", jdp.name=" + jdpName); + assertNotEquals(null, payload.get("PROCESS_ID"), "Expected payload.get(\"PROCESS_ID\") to be not null."); } /** -- GitLab