--- 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);
}