# HG changeset patch # User mbaesken # Date 1574846652 -3600 # Wed Nov 27 10:24:12 2019 +0100 # Node ID 6a9ad57cc6b128f5d8fea209acda0029d8c119a7 # Parent b24f4caa1411a225ffc4601a3b02c5f87d11cc14 8234741: enhance os::get_core_path on macOS diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp --- a/src/hotspot/os/bsd/os_bsd.cpp +++ b/src/hotspot/os/bsd/os_bsd.cpp @@ -3762,11 +3762,30 @@ } } -// Get the default path to the core file +// Get the kern.corefile setting, or otherwise the default path to the core file // Returns the length of the string int os::get_core_path(char* buffer, size_t bufferSize) { - int n = jio_snprintf(buffer, bufferSize, "/cores/core.%d", current_process_id()); - + int n = 0; +#ifdef __APPLE__ + char coreinfo[MAX_PATH]; + size_t sz = sizeof(coreinfo); + int ret = sysctlbyname("kern.corefile", coreinfo, &sz, NULL, 0); + if (ret == 0) { + char *pid_pos = strstr(coreinfo, "%P"); + // skip over the "%P" to preserve any optional custom user pattern + const char* tail = (pid_pos != NULL) ? (pid_pos + 2) : ""; + + if (pid_pos != NULL) { + *pid_pos = '\0'; + n = jio_snprintf(buffer, bufferSize, "%s%d%s", coreinfo, os::current_process_id(), tail); + } else { + n = jio_snprintf(buffer, bufferSize, "%s", coreinfo); + } + } else +#endif + { + n = jio_snprintf(buffer, bufferSize, "/cores/core.%d", current_process_id()); + } // Truncate if theoretical string was longer than bufferSize n = MIN2(n, (int)bufferSize);