From e4ecff6f3ff5e0ab617627f8637e4c3179cc4caf Mon Sep 17 00:00:00 2001 From: bptato Date: Mon, 13 Feb 2023 15:38:51 +0100 Subject: buffer: adapt onload to PosixStream and SocketStream --- src/buffer/buffer.nim | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'src/buffer') diff --git a/src/buffer/buffer.nim b/src/buffer/buffer.nim index 51c09616..04304afb 100644 --- a/src/buffer/buffer.nim +++ b/src/buffer/buffer.nim @@ -652,21 +652,20 @@ proc onload(buffer: Buffer) = try: buffer.sstream.setPosition(op + buffer.available) let n = buffer.istream.readData(addr s[0], buffer.readbufsize) - assert n != 0 - s.setLen(n) - buffer.sstream.setPosition(op) - if buffer.readbufsize < BufferSize: - buffer.readbufsize = min(BufferSize, buffer.readbufsize * 2) - buffer.available += s.len - case buffer.contenttype - of "text/html": - res.bytes = buffer.available - else: - buffer.do_reshape() - buffer.resolveTask(LOAD, res) - except EOFError: - res.atend = true - buffer.finishLoad() + if n != 0: # n can be 0 if we get EOF. (in which case we shouldn't reshape unnecessarily.) + s.setLen(n) + buffer.sstream.setPosition(op) + if buffer.readbufsize < BufferSize: + buffer.readbufsize = min(BufferSize, buffer.readbufsize * 2) + buffer.available += s.len + case buffer.contenttype + of "text/html": + res.bytes = buffer.available + else: + buffer.do_reshape() + if buffer.istream.atEnd(): + res.atend = true + buffer.finishLoad() buffer.resolveTask(LOAD, res) except ErrorAgain, ErrorWouldBlock: if buffer.readbufsize > 1: -- cgit 1.4.1-2-gfad0