summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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