diff --git a/mercurial/streamclone.py b/mercurial/streamclone.py
index 1330278b902929bee0479e7a516f428358063db9_bWVyY3VyaWFsL3N0cmVhbWNsb25lLnB5..5480647c2964433d0c05afe7aa41dbd0638198a5_bWVyY3VyaWFsL3N0cmVhbWNsb25lLnB5 100644
--- a/mercurial/streamclone.py
+++ b/mercurial/streamclone.py
@@ -1156,7 +1156,8 @@
                     else:
                         fc = _ThreadSafeFileChunker
                         data_queue = _DataQueue(memory_target=memory_target)
-                        mark_used = data_queue.mark_used
+                        if memory_target is not None:
+                            mark_used = data_queue.mark_used
                         raw_data = util.chunkbuffer(data_queue)
 
                         w = threading.Thread(
@@ -1271,7 +1272,7 @@
 class _DataQueue:
     """A queue passing data from the bundle stream to other thread
 
-    It has a "target_memory" optional parameter to avoid buffering too much
+    It has a "memory_target" optional parameter to avoid buffering too much
     information. The implementation is not exact and the memory target might be
     exceed for a time in some situation.
     """
@@ -1314,12 +1315,13 @@
 
         This is meant to be used from another thread than the one filler the queue.
         """
-        with self._lock:
-            if offset > self._current_used:
-                self._current_used = offset
-            # If the reader is waiting for room, unblock it.
-            if self._wait.locked() and self._has_free_space():
-                self._wait.release()
+        if self._memory_target is not None:
+            with self._lock:
+                if offset > self._current_used:
+                    self._current_used = offset
+                # If the reader is waiting for room, unblock it.
+                if self._wait.locked() and self._has_free_space():
+                    self._wait.release()
 
     def fill_from(self, data):
         """fill the data queue from a bundle2 part object
@@ -1333,20 +1335,21 @@
                 q.put(item)
                 if self._abort:
                     break
-                with self._lock:
-                    while not self._has_free_space():
-                        # make sure the _wait lock is locked
-                        # this is done under lock, so there case be no race with the release logic
-                        self._wait.acquire(blocking=False)
-                        self._lock.release()
-                        # acquiring the lock will block until some other thread release it.
-                        self._wait.acquire()
-                        # lets dive into the locked section again
-                        self._lock.acquire()
-                        # make sure we release the lock we just grabed if
-                        # needed.
-                        if self._wait.locked():
-                            self._wait.release()
+                if self._memory_target is not None:
+                    with self._lock:
+                        while not self._has_free_space():
+                            # make sure the _wait lock is locked
+                            # this is done under lock, so there case be no race with the release logic
+                            self._wait.acquire(blocking=False)
+                            self._lock.release()
+                            # acquiring the lock will block until some other thread release it.
+                            self._wait.acquire()
+                            # lets dive into the locked section again
+                            self._lock.acquire()
+                            # make sure we release the lock we just grabed if
+                            # needed.
+                            if self._wait.locked():
+                                self._wait.release()
         finally:
             q.put(None)
 
@@ -1367,10 +1370,11 @@
         """
         self._abort = True
         self._q.put(None)
-        with self._lock:
-            # make sure we unstuck the reader thread.
-            if self._wait.locked():
-                self._wait.release()
+        if self._memory_target is not None:
+            with self._lock:
+                # make sure we unstuck the reader thread.
+                if self._wait.locked():
+                    self._wait.release()
 
 
 class _FileInfoQueue: