< prev index next >
src/hotspot/os/bsd/os_bsd.cpp
Print this page
rev 57040 : 8234741: enhance os::get_core_path on macOS
@@ -3760,15 +3760,34 @@
return status;
}
}
}
-// 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");
+ const char* tail = (pid_pos != NULL) ? (pid_pos + 2) : ""; // skip over the "%P"
+ int mypid = current_process_id();
+ if (pid_pos != NULL) {
+ *pid_pos = '\0';
+ n = jio_snprintf(buffer, bufferSize, "%s%d%s", coreinfo, mypid, 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 >