rocksdb: Fix 'Division by zero' scan-build warning

Summary:
scan-build complains with division by zero warning in a test. Added an assertion to prevent this.

scan-build report: http://home.fburl.com/~sugak/latest6/report-c61be9.html#EndPath

Test Plan:
Make sure scan-build does not report 'Division by zero' and all tests are passing.
```lang=bash
% make analyze
% make check
```

Reviewers: igor, meyering

Reviewed By: meyering

Subscribers: sdong, dhruba, leveldb

Differential Revision: https://reviews.facebook.net/D33495
This commit is contained in:
Igor Sugak 2015-02-17 17:54:02 -08:00
parent 12753130ec
commit 3ad6b794cf
2 changed files with 16 additions and 13 deletions

View File

@ -177,10 +177,10 @@ TEST(DynamicBloomTest, perf) {
++count; ++count;
} }
} }
ASSERT_EQ(count, num_keys);
elapsed = timer.ElapsedNanos(); elapsed = timer.ElapsedNanos();
fprintf(stderr, "standard bloom, avg query latency %" PRIu64 "\n", fprintf(stderr, "standard bloom, avg query latency %" PRIu64 "\n",
elapsed / count); elapsed / count);
ASSERT_TRUE(count == num_keys);
// Locality enabled version // Locality enabled version
DynamicBloom blocked_bloom(&arena, num_keys * 10, 1, num_probes); DynamicBloom blocked_bloom(&arena, num_keys * 10, 1, num_probes);

View File

@ -401,16 +401,16 @@ class PosixMmapFile : public WritableFile {
return s; return s;
} }
bool UnmapCurrentRegion() { Status UnmapCurrentRegion() {
bool result = true;
TEST_KILL_RANDOM(rocksdb_kill_odds); TEST_KILL_RANDOM(rocksdb_kill_odds);
if (base_ != nullptr) { if (base_ != nullptr) {
if (last_sync_ < limit_) { if (last_sync_ < limit_) {
// Defer syncing this data until next Sync() call, if any // Defer syncing this data until next Sync() call, if any
pending_sync_ = true; pending_sync_ = true;
} }
if (munmap(base_, limit_ - base_) != 0) { int munmap_status = munmap(base_, limit_ - base_);
result = false; if (munmap_status != 0) {
return IOError(filename_, munmap_status);
} }
file_offset_ += limit_ - base_; file_offset_ += limit_ - base_;
base_ = nullptr; base_ = nullptr;
@ -423,7 +423,7 @@ class PosixMmapFile : public WritableFile {
map_size_ *= 2; map_size_ *= 2;
} }
} }
return result; return Status::OK();
} }
Status MapNewRegion() { Status MapNewRegion() {
@ -498,13 +498,15 @@ class PosixMmapFile : public WritableFile {
assert(dst_ <= limit_); assert(dst_ <= limit_);
size_t avail = limit_ - dst_; size_t avail = limit_ - dst_;
if (avail == 0) { if (avail == 0) {
if (UnmapCurrentRegion()) { Status s = UnmapCurrentRegion();
Status s = MapNewRegion(); if (!s.ok()) {
if (!s.ok()) { return s;
return s;
}
TEST_KILL_RANDOM(rocksdb_kill_odds);
} }
s = MapNewRegion();
if (!s.ok()) {
return s;
}
TEST_KILL_RANDOM(rocksdb_kill_odds);
} }
size_t n = (left <= avail) ? left : avail; size_t n = (left <= avail) ? left : avail;
@ -524,7 +526,8 @@ class PosixMmapFile : public WritableFile {
TEST_KILL_RANDOM(rocksdb_kill_odds); TEST_KILL_RANDOM(rocksdb_kill_odds);
if (!UnmapCurrentRegion()) { s = UnmapCurrentRegion();
if (!s.ok()) {
s = IOError(filename_, errno); s = IOError(filename_, errno);
} else if (unused > 0) { } else if (unused > 0) {
// Trim the extra space at the end of the file // Trim the extra space at the end of the file