summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBas Westerbaan <bas@westerbaan.name>2014-06-14 18:30:38 +0200
committerBas Westerbaan <bas@westerbaan.name>2014-06-14 18:30:38 +0200
commit7eb371f8278941fb2323e0c2333ed89c88ab822b (patch)
tree521143410dad4438a12d0f6bd835e21251dd9db1
parentba8cf1c402fe68f283480c9abbf7707d004a8583 (diff)
downloadmsgpack-python-7eb371f8278941fb2323e0c2333ed89c88ab822b.tar.gz
fallback: do not reset the buffer completely in between of iterations
-rw-r--r--msgpack/fallback.py12
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