Repository navigation
Conversation
The workers stopped when the thread that called open() ended. Reads then returned truncated data and writes waited forever. Now they stop only when the main thread has ended too, which still lets Python exit with an unclosed file.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When the thread that opened an
igzip_threadedfile ends, for example aThreadPoolExecutorthread aftershutdown(), reads return truncated data without an error, andwrite()andclose()wait forever. The worker threads stop when the opening thread is not alive, a check that 1.7.1 added so that an unclosed file does not block exit. They now keep running while the opening thread or the main thread is alive. At exit, Python marks the main thread stopped before it waits for the other threads, so the 1.7.1 case still exits.test_threaded_reader_opened_in_finished_threadandtest_threaded_writer_opened_in_finished_threadfail on develop.One narrow case gets worse: on Python 3.13 and later, destroying a legacy subinterpreter waits forever when a file that an ended thread in it opened is still open. Develop already waits forever there for files opened by the thread that runs the subinterpreter.
Checklist