Commit 72750a85 authored by Nadeem Vawda's avatar Nadeem Vawda

Issue #13809: Make bz2 module work with threads disabled.

Original patch by Amaury Forgeot d'Arc.
parent 7422b22e
...@@ -10,9 +10,13 @@ __all__ = ["BZ2File", "BZ2Compressor", "BZ2Decompressor", "compress", ...@@ -10,9 +10,13 @@ __all__ = ["BZ2File", "BZ2Compressor", "BZ2Decompressor", "compress",
__author__ = "Nadeem Vawda <nadeem.vawda@gmail.com>" __author__ = "Nadeem Vawda <nadeem.vawda@gmail.com>"
import io import io
import threading
import warnings import warnings
try:
from threading import RLock
except ImportError:
from dummy_threading import RLock
from _bz2 import BZ2Compressor, BZ2Decompressor from _bz2 import BZ2Compressor, BZ2Decompressor
...@@ -53,7 +57,7 @@ class BZ2File(io.BufferedIOBase): ...@@ -53,7 +57,7 @@ class BZ2File(io.BufferedIOBase):
""" """
# This lock must be recursive, so that BufferedIOBase's # This lock must be recursive, so that BufferedIOBase's
# readline(), readlines() and writelines() don't deadlock. # readline(), readlines() and writelines() don't deadlock.
self._lock = threading.RLock() self._lock = RLock()
self._fp = None self._fp = None
self._closefp = False self._closefp = False
self._mode = _MODE_CLOSED self._mode = _MODE_CLOSED
......
...@@ -463,6 +463,13 @@ class BZ2FileTest(BaseTest): ...@@ -463,6 +463,13 @@ class BZ2FileTest(BaseTest):
for t in threads: for t in threads:
t.join() t.join()
def testWithoutThreading(self):
bz2 = support.import_fresh_module("bz2", blocked=("threading",))
with bz2.BZ2File(self.filename, "wb") as f:
f.write(b"abc")
with bz2.BZ2File(self.filename, "rb") as f:
self.assertEqual(f.read(), b"abc")
def testMixedIterationAndReads(self): def testMixedIterationAndReads(self):
self.createTempFile() self.createTempFile()
linelen = len(self.TEXT_LINES[0]) linelen = len(self.TEXT_LINES[0])
......
...@@ -447,6 +447,9 @@ Core and Builtins ...@@ -447,6 +447,9 @@ Core and Builtins
Library Library
------- -------
- Issue #13809: Fix regression where bz2 module wouldn't work when threads are
disabled. Original patch by Amaury Forgeot d'Arc.
- Issue #13589: Fix some serialization primitives in the aifc module. - Issue #13589: Fix some serialization primitives in the aifc module.
Patch by Oleg Plakhotnyuk. Patch by Oleg Plakhotnyuk.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment