8234741: enhance os::get_core_path on macOS
Reviewed-by: clanger, gziemski
This commit is contained in:
parent
6ba58f7633
commit
fec6f8a1e4
@ -3763,11 +3763,30 @@ int os::fork_and_exec(char* cmd, bool use_vfork_if_available) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
// Returns the length of the string
|
||||||
int os::get_core_path(char* buffer, size_t bufferSize) {
|
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", os::current_process_id());
|
||||||
|
}
|
||||||
// Truncate if theoretical string was longer than bufferSize
|
// Truncate if theoretical string was longer than bufferSize
|
||||||
n = MIN2(n, (int)bufferSize);
|
n = MIN2(n, (int)bufferSize);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user