When reallocating an I/O buffer to accommodate a large record,
ensure that the amount of growth is at least as large as the
minimum initial record size (64KiB). The previous policy was
causing input buffer reallocation for each byte after the minimum
buffer size when scanning input data for record termination
newlines.
Differential Revision: https://reviews.llvm.org/D118649
if (bytes > size_) {
char *old{buffer_};
auto oldSize{size_};
- size_ = std::max<std::int64_t>(bytes, minBuffer);
+ size_ = std::max<std::int64_t>(bytes, size_ + minBuffer);
buffer_ =
reinterpret_cast<char *>(AllocateMemoryOrCrash(terminator, size_));
auto chunk{std::min<std::int64_t>(length_, oldSize - start_)};