diff --git a/core/reactor.hh b/core/reactor.hh index a70211f818..2cbb50459e 100644 --- a/core/reactor.hh +++ b/core/reactor.hh @@ -566,7 +566,6 @@ class input_stream { static_assert(sizeof(CharType) == 1, "must buffer stream of bytes"); data_source _fd; temporary_buffer _buf; - std::vector> _scanned; bool _eof = false; private: using tmp_buf = temporary_buffer; @@ -782,19 +781,19 @@ template template future<> input_stream::consume(Consumer& consumer) { - if (_scanned.empty()) { + if (_buf.empty() && !_eof) { return _fd.get().then([this, &consumer] (tmp_buf buf) { - _scanned.push_back(std::move(buf)); + _buf = std::move(buf); + _eof = _buf.empty(); return consume(consumer); }); } else { - auto tmp = std::move(_scanned.back()); - _scanned.pop_back(); + auto tmp = std::move(_buf); bool done = tmp.empty(); consumer(std::move(tmp), [this, &done] (tmp_buf unconsumed) { done = true; if (!unconsumed.empty()) { - _scanned.push_back(std::move(unconsumed)); + _buf = std::move(unconsumed); } }); if (!done) {