projects
/
folly.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
update moveToFbString()'s handling of flags_
[folly.git]
/
folly
/
io
/
IOBuf.cpp
diff --git
a/folly/io/IOBuf.cpp
b/folly/io/IOBuf.cpp
index 5bab8716c9ce0722865dc4c6396d6990af5ef056..130e7d665493a0b4e6969cb392ae911c6f6b27bc 100644
(file)
--- a/
folly/io/IOBuf.cpp
+++ b/
folly/io/IOBuf.cpp
@@
-648,9
+648,10
@@
void IOBuf::initExtBuffer(uint8_t* buf, size_t mallocSize,
}
fbstring IOBuf::moveToFbString() {
}
fbstring IOBuf::moveToFbString() {
- //
Externally allocated buffers (malloc)
are just fine, everything else needs
+ //
malloc-allocated buffers
are just fine, everything else needs
// to be turned into one.
// to be turned into one.
- if (flags_ != kFlagExt || // not malloc()-ed
+ if ((flags_ & (kFlagExt | kFlagUserOwned)) != kFlagExt || // not malloc()-ed
+ ext_.sharedInfo->freeFn != nullptr || // not malloc()-ed
headroom() != 0 || // malloc()-ed block doesn't start at beginning
tailroom() == 0 || // no room for NUL terminator
isShared() || // shared
headroom() != 0 || // malloc()-ed block doesn't start at beginning
tailroom() == 0 || // no room for NUL terminator
isShared() || // shared
@@
-666,6
+667,10
@@
fbstring IOBuf::moveToFbString() {
length(), capacity(),
AcquireMallocatedString());
length(), capacity(),
AcquireMallocatedString());
+ if (flags_ & kFlagFreeSharedInfo) {
+ delete ext_.sharedInfo;
+ }
+
// Reset to internal buffer.
flags_ = 0;
clear();
// Reset to internal buffer.
flags_ = 0;
clear();