8207832: serviceability/sa/ClhsdbCDSCore.java failed with "Couldn't find core file location"
authoriklam
Wed, 15 Aug 2018 19:22:46 -0700
changeset 51418 45d1f2ec5342
parent 51417 b08c2a94cce1
child 51419 c11be049acb8
8207832: serviceability/sa/ClhsdbCDSCore.java failed with "Couldn't find core file location" Summary: Handle %p in /proc/sys/kernel/core_pattern Reviewed-by: dholmes, hseigel
src/hotspot/os/linux/os_linux.cpp
test/hotspot/jtreg/ProblemList.txt
test/hotspot/jtreg/serviceability/sa/ClhsdbCDSCore.java
--- a/src/hotspot/os/linux/os_linux.cpp	Tue Aug 14 20:46:46 2018 -0700
+++ b/src/hotspot/os/linux/os_linux.cpp	Wed Aug 15 19:22:46 2018 -0700
@@ -5793,11 +5793,21 @@
     core_pattern[ret] = '\0';
   }
 
+  // Replace the %p in the core pattern with the process id. NOTE: we do this
+  // only if the pattern doesn't start with "|", and we support only one %p in
+  // the pattern.
   char *pid_pos = strstr(core_pattern, "%p");
+  const char* tail = (pid_pos != NULL) ? (pid_pos + 2) : "";  // skip over the "%p"
   int written;
 
   if (core_pattern[0] == '/') {
-    written = jio_snprintf(buffer, bufferSize, "%s", core_pattern);
+    if (pid_pos != NULL) {
+      *pid_pos = '\0';
+      written = jio_snprintf(buffer, bufferSize, "%s%d%s", core_pattern,
+                             current_process_id(), tail);
+    } else {
+      written = jio_snprintf(buffer, bufferSize, "%s", core_pattern);
+    }
   } else {
     char cwd[PATH_MAX];
 
@@ -5810,6 +5820,10 @@
       written = jio_snprintf(buffer, bufferSize,
                              "\"%s\" (or dumping to %s/core.%d)",
                              &core_pattern[1], p, current_process_id());
+    } else if (pid_pos != NULL) {
+      *pid_pos = '\0';
+      written = jio_snprintf(buffer, bufferSize, "%s/%s%d%s", p, core_pattern,
+                             current_process_id(), tail);
     } else {
       written = jio_snprintf(buffer, bufferSize, "%s/%s", p, core_pattern);
     }
--- a/test/hotspot/jtreg/ProblemList.txt	Tue Aug 14 20:46:46 2018 -0700
+++ b/test/hotspot/jtreg/ProblemList.txt	Wed Aug 15 19:22:46 2018 -0700
@@ -88,7 +88,6 @@
 # :hotspot_serviceability
 
 serviceability/sa/ClhsdbAttach.java 8193639 solaris-all
-serviceability/sa/ClhsdbCDSCore.java 8207832 linux-x64
 serviceability/sa/ClhsdbCDSJstackPrintAll.java 8193639 solaris-all
 serviceability/sa/ClhsdbField.java 8193639 solaris-all
 serviceability/sa/ClhsdbFindPC.java 8193639 solaris-all
--- a/test/hotspot/jtreg/serviceability/sa/ClhsdbCDSCore.java	Tue Aug 14 20:46:46 2018 -0700
+++ b/test/hotspot/jtreg/serviceability/sa/ClhsdbCDSCore.java	Wed Aug 15 19:22:46 2018 -0700
@@ -201,6 +201,7 @@
             .get();
         stringWithLocation = stringWithLocation.substring(stringWithLocation
             .indexOf(LOCATIONS_STRING) + LOCATIONS_STRING.length());
+        System.out.println("getCoreFileLocation found stringWithLocation = " + stringWithLocation);
         String coreWithPid;
         if (stringWithLocation.contains("or ")) {
             Matcher m = Pattern.compile("or.* ([^ ]+[^\\)])\\)?").matcher(stringWithLocation);