提交 b2c392c3 编写于 作者: M mikael

7129724: MAC: Core file location is wrong in crash report

Summary: Updated core path location to reflect macosx default
Reviewed-by: dholmes, kamg
上级 dea755b9
...@@ -5801,3 +5801,14 @@ bool os::is_headless_jre() { ...@@ -5801,3 +5801,14 @@ bool os::is_headless_jre() {
return true; return true;
} }
// 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");
// Truncate if theoretical string was longer than bufferSize
n = MIN2(n, (int)bufferSize);
return n;
}
...@@ -5447,6 +5447,18 @@ bool os::is_headless_jre() { ...@@ -5447,6 +5447,18 @@ bool os::is_headless_jre() {
return true; return true;
} }
// Get the default path to the core file
// Returns the length of the string
int os::get_core_path(char* buffer, size_t bufferSize) {
const char* p = get_current_directory(buffer, bufferSize);
if (p == NULL) {
assert(p != NULL, "failed to get current directory");
return 0;
}
return strlen(buffer);
}
#ifdef JAVASE_EMBEDDED #ifdef JAVASE_EMBEDDED
// //
......
...@@ -34,19 +34,19 @@ ...@@ -34,19 +34,19 @@
// Check core dump limit and report possible place where core can be found // Check core dump limit and report possible place where core can be found
void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize) { void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize) {
int n;
struct rlimit rlim; struct rlimit rlim;
static char cwd[O_BUFLEN];
bool success; bool success;
get_current_directory(cwd, sizeof(cwd)); n = get_core_path(buffer, bufferSize);
if (getrlimit(RLIMIT_CORE, &rlim) != 0) { if (getrlimit(RLIMIT_CORE, &rlim) != 0) {
jio_snprintf(buffer, bufferSize, "%s/core or core.%d (may not exist)", cwd, current_process_id()); jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (may not exist)", current_process_id());
success = true; success = true;
} else { } else {
switch(rlim.rlim_cur) { switch(rlim.rlim_cur) {
case RLIM_INFINITY: case RLIM_INFINITY:
jio_snprintf(buffer, bufferSize, "%s/core or core.%d", cwd, current_process_id()); jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d", current_process_id());
success = true; success = true;
break; break;
case 0: case 0:
...@@ -54,7 +54,7 @@ void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* ...@@ -54,7 +54,7 @@ void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char*
success = false; success = false;
break; break;
default: default:
jio_snprintf(buffer, bufferSize, "%s/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", cwd, current_process_id(), (unsigned long)(rlim.rlim_cur >> 10)); jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", current_process_id(), (unsigned long)(rlim.rlim_cur >> 10));
success = true; success = true;
break; break;
} }
......
...@@ -6537,3 +6537,16 @@ int os::bind(int fd, struct sockaddr* him, socklen_t len) { ...@@ -6537,3 +6537,16 @@ int os::bind(int fd, struct sockaddr* him, socklen_t len) {
INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\ INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\
os::Solaris::clear_interrupted); os::Solaris::clear_interrupted);
} }
// Get the default path to the core file
// Returns the length of the string
int os::get_core_path(char* buffer, size_t bufferSize) {
const char* p = get_current_directory(buffer, bufferSize);
if (p == NULL) {
assert(p != NULL, "failed to get current directory");
return 0;
}
return strlen(buffer);
}
...@@ -665,6 +665,10 @@ class os: AllStatic { ...@@ -665,6 +665,10 @@ class os: AllStatic {
// On Windows this will create an actual minidump, on Linux/Solaris it will simply check core dump limits // On Windows this will create an actual minidump, on Linux/Solaris it will simply check core dump limits
static void check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize); static void check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize);
// Get the default path to the core file
// Returns the length of the string
static int get_core_path(char* buffer, size_t bufferSize);
// JVMTI & JVM monitoring and management support // JVMTI & JVM monitoring and management support
// The thread_cpu_time() and current_thread_cpu_time() are only // The thread_cpu_time() and current_thread_cpu_time() are only
// supported if is_thread_cpu_time_supported() returns true. // supported if is_thread_cpu_time_supported() returns true.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册