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; }