--- old/open/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java 2017-12-19 09:47:46.768112894 -0500 +++ new/open/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java 2017-12-19 09:47:46.400091472 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -46,9 +46,7 @@ // will not be able to find all Hotspot processes. // Any changes to this needs to be synchronized with HotSpot. private static final String tmpdir = "/tmp"; - - // The patch to the socket file created by the target VM - String path; + String socket_name; /** * Attaches to the target VM @@ -69,8 +67,9 @@ // Find the socket file. If not found then we attempt to start the // attach mechanism in the target VM by sending it a QUIT signal. // Then we attempt to find the socket file again. - path = findSocketFile(pid); - if (path == null) { + File path = new File(tmpdir, ".java_pid" + pid); + socket_name = path.getPath(); + if (!path.exists()) { File f = createAttachFile(pid); try { sendQuitTo(pid); @@ -86,19 +85,19 @@ try { Thread.sleep(delay); } catch (InterruptedException x) { } - path = findSocketFile(pid); time_spend += delay; - if (time_spend > timeout/2 && path == null) { + if (time_spend > timeout/2 && !path.exists()) { // Send QUIT again to give target VM the last chance to react sendQuitTo(pid); } - } while (time_spend <= timeout && path == null); - if (path == null) { + } while (time_spend <= timeout && !path.exists()); + if (!path.exists()) { throw new AttachNotSupportedException( String.format("Unable to open socket file %s: " + "target process %d doesn't respond within %dms " + - "or HotSpot VM not loaded", f.getPath(), pid, time_spend)); + "or HotSpot VM not loaded", socket_name, pid, + time_spend)); } } finally { f.delete(); @@ -107,14 +106,14 @@ // Check that the file owner/permission to avoid attaching to // bogus process - checkPermissions(path); + checkPermissions(socket_name); // Check that we can connect to the process // - this ensures we throw the permission denied error now rather than // later when we attempt to enqueue a command. int s = socket(); try { - connect(s, path); + connect(s, socket_name); } finally { close(s); } @@ -264,15 +263,6 @@ } } - // Return the socket file for the given process. - private String findSocketFile(int pid) { - File f = new File(tmpdir, ".java_pid" + pid); - if (!f.exists()) { - return null; - } - return f.getPath(); - } - // On Solaris/Linux/Aix a simple handshake is used to start the attach mechanism // if not already started. The client creates a .attach_pid file in the // target VM's working directory (or temp directory), and the SIGQUIT handler