提交 a2475076 编写于 作者: B bobv

7007769: VM crashes with SIGBUS writing PerfData if tmp space is full

Summary: Fill perfdata file with zeros to verify available disk space
Reviewed-by: coleenp, kamg
上级 1e08d03c
......@@ -635,7 +635,29 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
return -1;
}
return fd;
// Verify that we have enough disk space for this file.
// We'll get random SIGBUS crashes on memory accesses if
// we don't.
for (size_t seekpos = 0; seekpos < size; seekpos += os::vm_page_size()) {
int zero_int = 0;
result = (int)os::seek_to_file_offset(fd, (jlong)(seekpos));
if (result == -1 ) break;
RESTARTABLE(::write(fd, &zero_int, 1), result);
if (result != 1) {
if (errno == ENOSPC) {
warning("Insufficient space for shared memory file:\n %s\nTry using the -Djava.io.tmpdir= option to select an alternate temp location.\n", filename);
}
break;
}
}
if (result != -1) {
return fd;
} else {
RESTARTABLE(::close(fd), result);
return -1;
}
}
// open the shared memory file for the given user and vmid. returns
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册