diff options
author | Bas Westerbaan <bas@westerbaan.name> | 2014-06-14 18:30:38 +0200 |
---|---|---|
committer | Bas Westerbaan <bas@westerbaan.name> | 2014-06-14 18:30:38 +0200 |
commit | 7eb371f8278941fb2323e0c2333ed89c88ab822b (patch) | |
tree | 521143410dad4438a12d0f6bd835e21251dd9db1 | |
parent | ba8cf1c402fe68f283480c9abbf7707d004a8583 (diff) | |
download | msgpack-python-7eb371f8278941fb2323e0c2333ed89c88ab822b.tar.gz |
fallback: do not reset the buffer completely in between of iterations
-rw-r--r-- | msgpack/fallback.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/msgpack/fallback.py b/msgpack/fallback.py index 0e0557f..d838e55 100644 --- a/msgpack/fallback.py +++ b/msgpack/fallback.py @@ -201,7 +201,16 @@ class Unpacker(object): self._fb_buf_n += len(next_bytes) self._fb_buffers.append(next_bytes) + def _fb_sloppy_consume(self): + """ Gets rid of some of the used parts of the buffer. """ + if self._fb_buf_i: + for i in xrange(self._fb_buf_i): + self._fb_buf_n -= len(self._fb_buffers[i]) + self._fb_buffers = self._fb_buffers[self._fb_buf_i:] + self._fb_buf_i = 0 + def _fb_consume(self): + """ Gets rid of the used parts of the buffer. """ if self._fb_buf_i: for i in xrange(self._fb_buf_i): self._fb_buf_n -= len(self._fb_buffers[i]) @@ -446,9 +455,10 @@ class Unpacker(object): def next(self): try: ret = self._fb_unpack(EX_CONSTRUCT, None) - self._fb_consume() + self._fb_sloppy_consume() return ret except OutOfData: + self._fb_consume() raise StopIteration __next__ = next |