Fix a segfault in fbson under Mac OS X compiler

Summary:
The problem appears to be caused by a bug in Mac OS X compiler
(http://llvm.org/bugs/show_bug.cgi?id=15337). We need explicitly construct the
base object std::ostream(std::streambuf*) with nullptr. Otherwise, ostream will
try to delete the underlying streambuf* which apparently is undefined in the
Mac OS X compiler.

https://github.com/facebook/rocksdb/issues/525

Test Plan:
unit test in fbson
make all check
document_db_test (on mac)

Reviewers: IslamAbdelRahman, igor

Reviewed By: igor

Subscribers: dhruba

Differential Revision: https://reviews.facebook.net/D34587
This commit is contained in:
Tian Xia 2015-03-05 21:34:23 -08:00
parent 694988b627
commit 492f6d27ed
1 changed files with 10 additions and 2 deletions

View File

@ -62,7 +62,11 @@ class FbsonInBuffer : public std::streambuf {
class FbsonOutStream : public std::ostream {
public:
explicit FbsonOutStream(uint32_t capacity = 1024)
: head_(nullptr), size_(0), capacity_(capacity), alloc_(true) {
: std::ostream(nullptr),
head_(nullptr),
size_(0),
capacity_(capacity),
alloc_(true) {
if (capacity_ == 0) {
capacity_ = 1024;
}
@ -71,7 +75,11 @@ class FbsonOutStream : public std::ostream {
}
FbsonOutStream(char* buffer, uint32_t capacity)
: head_(buffer), size_(0), capacity_(capacity), alloc_(false) {
: std::ostream(nullptr),
head_(buffer),
size_(0),
capacity_(capacity),
alloc_(false) {
assert(buffer && capacity_ > 0);
}