throw std::bad_alloc();
}
- uint8_t* bufEnd = static_cast<uint8_t*>(buf) +kMaxIOBufSize;
+ uint8_t* bufEnd = static_cast<uint8_t*>(buf) + kMaxIOBufSize;
unique_ptr<IOBuf> iobuf(new(buf) IOBuf(bufEnd));
assert(iobuf->capacity() >= capacity);
return iobuf;
data_(int_.buf),
length_(0),
flags_(0) {
- int_.capacity = end - int_.buf;
- assert(int_.capacity <= kMaxInternalDataSize);
+ assert(end - int_.buf == kMaxInternalDataSize);
+ assert(end - reinterpret_cast<uint8_t*>(this) == kMaxIOBufSize);
}
IOBuf::IOBuf(ExtBufTypeEnum type,
} else {
// We have an internal data buffer that cannot be shared
// Allocate a new IOBuf and copy the data into it.
- unique_ptr<IOBuf> iobuf(IOBuf::create(int_.capacity));
+ unique_ptr<IOBuf> iobuf(IOBuf::create(kMaxInternalDataSize));
assert((iobuf->flags_ & kFlagExt) == 0);
iobuf->data_ += headroom();
memcpy(iobuf->data_, data_, length_);
const uint8_t* bufferEnd() const {
return (flags_ & kFlagExt) ?
ext_.buf + ext_.capacity :
- int_.buf + int_.capacity;
+ int_.buf + kMaxInternalDataSize;
}
/**
* method to get the length of the actual valid data in this IOBuf.
*/
uint32_t capacity() const {
- return (flags_ & kFlagExt) ? ext_.capacity : int_.capacity;
+ return (flags_ & kFlagExt) ? ext_.capacity : kMaxInternalDataSize;
}
/**
SharedInfo* sharedInfo;
};
struct InternalBuf {
- uint32_t capacity;
uint8_t buf[] __attribute__((aligned));
};