# HG changeset patch # User Matthew Wild # Date 1665484675 -3600 # Node ID d26eefe98d09088823a53441bdf7311536acbc28 # Parent 79b89f3822909a0effea050b02d72a8e5d8f3116 util.dbuffer: Add efficient shortcuts for discard() in certain cases If the buffer is already empty, nothing to do. If we're throwing away the whole buffer, we can just empty it and avoid read_chunk() (which in turn may collapse()). These shortcuts are much more efficient. diff -r 79b89f382290 -r d26eefe98d09 util/dbuffer.lua --- a/util/dbuffer.lua Tue Oct 11 11:34:47 2022 +0100 +++ b/util/dbuffer.lua Tue Oct 11 11:37:55 2022 +0100 @@ -91,8 +91,12 @@ end function dbuffer_methods:discard(requested_bytes) - if requested_bytes > self._length then - return nil; + if self._length == 0 then return true; end + if not requested_bytes or requested_bytes >= self._length then + self.front_consumed = 0; + self._length = 0; + for _ in self.items:consume() do end + return true; end local chunk, read_bytes = self:read_chunk(requested_bytes);