Fix crash in PosixWritableFile::Close() when fstat() fails
Summary: We had a crash in this code: `fstat()` failed; `file_stats` contained garbage, in particular `file_stats.st_blksize == 6`; the expression `file_stats.st_blocks / (file_stats.st_blksize / 512)` divided by zero. Closes https://github.com/facebook/rocksdb/pull/2420 Differential Revision: D5216110 Pulled By: al13n321 fbshipit-source-id: 6d8fc5e7c4f98c1139e68c7829ebdbac68b0fce0
This commit is contained in:
parent
5de4fff167
commit
f2a0fa2640
5
env/io_posix.cc
vendored
5
env/io_posix.cc
vendored
@ -796,10 +796,11 @@ Status PosixWritableFile::Close() {
|
||||
// While we work with Travis-CI team to figure out if this is a
|
||||
// quirk of Docker/AUFS, we will comment this out.
|
||||
struct stat file_stats;
|
||||
fstat(fd_, &file_stats);
|
||||
int result = fstat(fd_, &file_stats);
|
||||
// After ftruncate, we check whether ftruncate has the correct behavior.
|
||||
// If not, we should hack it with FALLOC_FL_PUNCH_HOLE
|
||||
if ((file_stats.st_size + file_stats.st_blksize - 1) /
|
||||
if (result == 0 &&
|
||||
(file_stats.st_size + file_stats.st_blksize - 1) /
|
||||
file_stats.st_blksize !=
|
||||
file_stats.st_blocks / (file_stats.st_blksize / 512)) {
|
||||
IOSTATS_TIMER_GUARD(allocate_nanos);
|
||||
|
Loading…
Reference in New Issue
Block a user