src/os/posix/vm/os_posix.cpp
Print this page
*** 60,73 ****
--- 60,100 ----
switch(rlim.rlim_cur) {
case RLIM_INFINITY:
jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d", current_process_id());
success = true;
break;
+
case 0:
+ {
jio_snprintf(buffer, bufferSize, "Core dumps have been disabled. To enable core dumping, try \"ulimit -c unlimited\" before starting Java again");
+
+ #ifdef LINUX
+ /*
+ * Max length of /proc/sys/kernel/core_pattern is 128 characters.
+ * See https://www.kernel.org/doc/Documentation/sysctl/kernel.txt
+ */
+ const int core_pattern_len = 129;
+
+ char core_pattern[core_pattern_len] = {0};
+ bool is_redirect = false;
+ FILE *core_pattern_file = fopen("/proc/sys/kernel/core_pattern", "r");
+ if(core_pattern_file != NULL){
+ fgets(core_pattern, core_pattern_len, core_pattern_file);
+ fclose(core_pattern_file);
+ is_redirect = core_pattern[0] == '|';
+ }
+
+ if(is_redirect){
+ jio_snprintf(buffer, bufferSize,
+ "Core dumps may be treated with \"%s\"", &core_pattern[1]);
+ }
+ #endif
+
success = false;
break;
+ }
+
default:
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;
break;
}