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

Original patch by Amaury Forgeot d'Arc.
This commit is contained in:
Nadeem Vawda 2012-01-18 01:57:14 +02:00
parent 7422b22e5e
commit 72750a85f9
3 changed files with 16 additions and 2 deletions

View File

@ -10,9 +10,13 @@ __all__ = ["BZ2File", "BZ2Compressor", "BZ2Decompressor", "compress",
__author__ = "Nadeem Vawda <nadeem.vawda@gmail.com>"
import io
import threading
import warnings
try:
from threading import RLock
except ImportError:
from dummy_threading import RLock
from _bz2 import BZ2Compressor, BZ2Decompressor
@ -53,7 +57,7 @@ class BZ2File(io.BufferedIOBase):
"""
# This lock must be recursive, so that BufferedIOBase's
# readline(), readlines() and writelines() don't deadlock.
self._lock = threading.RLock()
self._lock = RLock()
self._fp = None
self._closefp = False
self._mode = _MODE_CLOSED

View File

@ -463,6 +463,13 @@ class BZ2FileTest(BaseTest):
for t in threads:
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):
self.createTempFile()
linelen = len(self.TEXT_LINES[0])

View File

@ -447,6 +447,9 @@ Core and Builtins
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.
Patch by Oleg Plakhotnyuk.