From ae4e85b3b21cbbe8cd360d43ed242697abc52008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Koutn=C3=BD?= Date: Thu, 10 Sep 2026 15:16:33 +0200 Subject: [PATCH 1/2] Fix BlobIO cleanup deadlock When reading less than 8 KiB from the blob's data (io.DEFAULT_BUFFER_SIZE), the close() method would hang. Namely, close() thread would wait for self._writer_closed but the writer thread that'd set this is blocked by waiting in Blob__write_to_queue/.../blob_filter_stream_write/queue.put. The queue remains "full" (maxsize=1) because of unread data and no progress happens. Fix this by switching to "busy" wait for _writer_closed thus we empty the queue from the main thread and writer thread can proceed to its termination. Fixes #1488 Assisted-by: sonnet-5 --- pygit2/blob.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pygit2/blob.py b/pygit2/blob.py index 1ee6a9eb7..cb496c533 100644 --- a/pygit2/blob.py +++ b/pygit2/blob.py @@ -86,10 +86,20 @@ def readinto(self, b, /): def close(self) -> None: try: - self._ready.wait() - self._writer_closed.wait() - while self._queue is not None and not self._queue.empty(): - self._queue.get() + # The writer thread may be blocked in queue.put() because the + # queue (maxsize=1) still holds a chunk that was never consumed + # (e.g. the reader stopped before reaching EOF). Draining the + # queue must happen *before* (not after) waiting for + # `_writer_closed`, otherwise the writer can never make progress + # to reach its close callback and this would deadlock. + while True: + self._ready.wait() + while self._queue is not None and not self._queue.empty(): + self._queue.get() + if self._writer_closed.is_set(): + # Done + break + self._ready.clear() self._thread.join() except KeyboardInterrupt: pass From e2ae520c17f6ca7a82768663b9aa43c3dcab27b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Koutn=C3=BD?= Date: Thu, 10 Sep 2026 15:04:38 +0200 Subject: [PATCH 2/2] tests: Add BlobIO test for reading bigger-than-chunk files The reader won't properly synchronize threads and when a file larger than DEFAULT_CHUNK_SIZE (8 KiB) is partially read, the close() method would hand in deadlock. Note: test/test_blob.py::test_blob_partial_read will hang indefinitely without a fix. --- test/conftest.py | 6 ++++++ test/data/bigrepo.zip | Bin 0 -> 66986 bytes test/test_blob.py | 13 +++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 test/data/bigrepo.zip diff --git a/test/conftest.py b/test/conftest.py index 69d3e6389..08037c56d 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -80,6 +80,12 @@ def testrepo(tmp_path: Path) -> Generator[Repository, None, None]: yield pygit2.Repository(path) +@pytest.fixture +def bigrepo(tmp_path: Path) -> Generator[Repository, None, None]: + with utils.TemporaryRepository('bigrepo.zip', tmp_path) as path: + yield pygit2.Repository(path) + + @pytest.fixture def testrepo_path(tmp_path: Path) -> Generator[tuple[Repository, Path], None, None]: with utils.TemporaryRepository('testrepo.zip', tmp_path) as path: diff --git a/test/data/bigrepo.zip b/test/data/bigrepo.zip new file mode 100644 index 0000000000000000000000000000000000000000..93b3bcb0f17e9869893ee0650f7256fb42ad3560 GIT binary patch literal 66986 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

#!==)Qa;(2ZuzpDFUM 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 huvPtD!UjNbCG6h None flags=BlobFilter.ATTRIBUTES_FROM_COMMIT, commit_id='not-a-valid-oid', # type: ignore[arg-type] ) + + +def test_blob_partial_read(bigrepo: Repository) -> None: + blob_oid = bigrepo.create_blob_fromworkdir('big.txt') + blob = bigrepo[blob_oid] + assert isinstance(blob, pygit2.Blob) + reader = pygit2.BlobIO(blob) + # Read only a few lines then break early + for i, line in enumerate(reader): + if i >= 3: + break + reader.close() + assert not reader.raw._thread.is_alive() # type: ignore[attr-defined]