diff --git a/mercurial/util.py b/mercurial/util.py
index 40d930848fd01522618be181277dd6ad5ef7f08a_bWVyY3VyaWFsL3V0aWwucHk=..37e081609828b57c15eb635d57011f7fc3ad5497_bWVyY3VyaWFsL3V0aWwucHk= 100644
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -870,10 +870,10 @@
                 else:
                     yield chunk
         self.iter = splitbig(in_iter)
-        self._queue = []
+        self._queue = deque()
 
     def read(self, l):
         """Read L bytes of data from the iterator of chunks of data.
         Returns less than L bytes if the iterator runs dry."""
         left = l
         buf = ''
@@ -874,10 +874,10 @@
 
     def read(self, l):
         """Read L bytes of data from the iterator of chunks of data.
         Returns less than L bytes if the iterator runs dry."""
         left = l
         buf = ''
-        queue = deque(self._queue)
+        queue = self._queue
         while left > 0:
             # refill the queue
             if not queue:
@@ -897,7 +897,6 @@
                 buf += chunk[:left]
             else:
                 buf += chunk
-        self._queue = list(queue)
 
         return buf