From: Nadeem Vawda <nadeem.vawda@gmail.com>
Date: Tue, 17 Jan 2012 23:57:14 +0000 (+0200)
Subject: Issue #13809: Make bz2 module work with threads disabled.
X-Git-Tag: v3.3.0a1~364^2~3
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=72750a85f970dc7d79c44c63fd02157634984762;p=python

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

Original patch by Amaury Forgeot d'Arc.
---

diff --git a/Lib/bz2.py b/Lib/bz2.py
index 5c59a9e08a..36e55584ed 100644
--- a/Lib/bz2.py
+++ b/Lib/bz2.py
@@ -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
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
index bd40f83fcf..0f8d14910f 100644
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -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])
diff --git a/Misc/NEWS b/Misc/NEWS
index 8178a92b89..246b3c1977 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.