From 6018e3bc95eec14b626d3a1069dd82dc9654eac5 Mon Sep 17 00:00:00 2001 From: Susan Hinrichs Date: Tue, 13 Dec 2016 23:46:04 +0000 Subject: [PATCH] TS-5095: IOBufferReader::read_avail adds to CPU utilization --- iocore/eventsystem/IOBuffer.cc | 13 +++++++------ iocore/eventsystem/P_IOBuffer.h | 2 -- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/iocore/eventsystem/IOBuffer.cc b/iocore/eventsystem/IOBuffer.cc index c7a2b78b78a..c1c11d7bbb3 100644 --- a/iocore/eventsystem/IOBuffer.cc +++ b/iocore/eventsystem/IOBuffer.cc @@ -188,19 +188,20 @@ MIOBuffer::puts(char *s, int64_t len) int64_t IOBufferReader::read(void *ab, int64_t len) { - char *b = (char *)ab; - int64_t max_bytes = read_avail(); - int64_t bytes = len <= max_bytes ? len : max_bytes; - int64_t n = bytes; + char *b = (char *)ab; + int64_t n = len; + int64_t l = block_read_avail(); + int64_t bytes = 0; - while (n) { - int64_t l = block_read_avail(); + while (n && l) { if (n < l) l = n; ::memcpy(b, start(), l); consume(l); b += l; n -= l; + bytes += l; + l = block_read_avail(); } return bytes; } diff --git a/iocore/eventsystem/P_IOBuffer.h b/iocore/eventsystem/P_IOBuffer.h index 18b273da820..7405a66479e 100644 --- a/iocore/eventsystem/P_IOBuffer.h +++ b/iocore/eventsystem/P_IOBuffer.h @@ -678,8 +678,6 @@ IOBufferReader::consume(int64_t n) block = block->next; r = block->read_avail(); } - - ink_assert(read_avail() >= 0); } TS_INLINE char &IOBufferReader::operator[](int64_t i)