Fixing delete in env_posix.cc
Summary: Was deleting incorrectly. Should delete the whole array. Test Plan: make;valgrind stops complaining about Mismatched free/delete Reviewers: dhruba, sheki Reviewed By: sheki CC: leveldb, haobo Differential Revision: https://reviews.facebook.net/D10059
This commit is contained in:
parent
faa32a72a6
commit
adb4e4509b
@ -425,7 +425,7 @@ class PosixWritableFile : public WritableFile {
|
|||||||
int fd_;
|
int fd_;
|
||||||
size_t cursize_; // current size of cached data in buf_
|
size_t cursize_; // current size of cached data in buf_
|
||||||
size_t capacity_; // max size of buf_
|
size_t capacity_; // max size of buf_
|
||||||
char* buf_; // a buffer to cache writes
|
unique_ptr<char[]> buf_; // a buffer to cache writes
|
||||||
uint64_t filesize_;
|
uint64_t filesize_;
|
||||||
bool pending_sync_;
|
bool pending_sync_;
|
||||||
bool pending_fsync_;
|
bool pending_fsync_;
|
||||||
@ -448,8 +448,6 @@ class PosixWritableFile : public WritableFile {
|
|||||||
if (fd_ >= 0) {
|
if (fd_ >= 0) {
|
||||||
PosixWritableFile::Close();
|
PosixWritableFile::Close();
|
||||||
}
|
}
|
||||||
delete buf_;
|
|
||||||
buf_ = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Status Append(const Slice& data) {
|
virtual Status Append(const Slice& data) {
|
||||||
@ -468,9 +466,8 @@ class PosixWritableFile : public WritableFile {
|
|||||||
}
|
}
|
||||||
// Increase the buffer size, but capped at 1MB
|
// Increase the buffer size, but capped at 1MB
|
||||||
if (capacity_ < (1<<20)) {
|
if (capacity_ < (1<<20)) {
|
||||||
delete buf_;
|
|
||||||
capacity_ *= 2;
|
capacity_ *= 2;
|
||||||
buf_ = new char[capacity_];
|
buf_.reset(new char[capacity_]);
|
||||||
}
|
}
|
||||||
assert(cursize_ == 0);
|
assert(cursize_ == 0);
|
||||||
}
|
}
|
||||||
@ -478,7 +475,7 @@ class PosixWritableFile : public WritableFile {
|
|||||||
// if the write fits into the cache, then write to cache
|
// if the write fits into the cache, then write to cache
|
||||||
// otherwise do a write() syscall to write to OS buffers.
|
// otherwise do a write() syscall to write to OS buffers.
|
||||||
if (cursize_ + left <= capacity_) {
|
if (cursize_ + left <= capacity_) {
|
||||||
memcpy(buf_+cursize_, src, left);
|
memcpy(buf_.get()+cursize_, src, left);
|
||||||
cursize_ += left;
|
cursize_ += left;
|
||||||
} else {
|
} else {
|
||||||
while (left != 0) {
|
while (left != 0) {
|
||||||
@ -511,7 +508,7 @@ class PosixWritableFile : public WritableFile {
|
|||||||
// write out the cached data to the OS cache
|
// write out the cached data to the OS cache
|
||||||
virtual Status Flush() {
|
virtual Status Flush() {
|
||||||
size_t left = cursize_;
|
size_t left = cursize_;
|
||||||
char* src = buf_;
|
char* src = buf_.get();
|
||||||
while (left != 0) {
|
while (left != 0) {
|
||||||
ssize_t done = write(fd_, src, left);
|
ssize_t done = write(fd_, src, left);
|
||||||
if (done < 0) {
|
if (done < 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user