< prev index next >

src/hotspot/os/bsd/os_bsd.cpp

Print this page
rev 57040 : 8234741: enhance os::get_core_path on macOS

*** 3760,3774 **** return status; } } } ! // Get 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()); // Truncate if theoretical string was longer than bufferSize n = MIN2(n, (int)bufferSize); return n; } --- 3760,3793 ---- return status; } } } ! // 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 = 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); return n; }
< prev index next >