summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorgrzgrzgrz3 <grzgrzgrz3@gmail.com>2017-05-25 14:22:57 (GMT)
committerAntoine Pitrou <pitrou@free.fr>2017-05-25 14:22:57 (GMT)
commitbc50f03db4f58c869b78e98468e374d7e61f1227 (patch)
tree432d3da98baf4590ccf03e2a6ddb4e797a363fab /Lib/test
parent7ff1e88a57a37a4cca3af9b0a3528b703d975ea2 (diff)
downloadcpython-bc50f03db4f58c869b78e98468e374d7e61f1227.zip
cpython-bc50f03db4f58c869b78e98468e374d7e61f1227.tar.gz
cpython-bc50f03db4f58c869b78e98468e374d7e61f1227.tar.bz2
bpo-30414: multiprocessing.Queue._feed do not break from main loop on exc (#1683)
* bpo-30414: multiprocesing.Queue._feed do not break from main loop on exc Queue background running thread was not handling exceptions correctly. Any exception occurred inside thread (putting unpickable object) cause feeder to finish running. After that every message put into queue is silently ignored. * bpo-30414: multiprocesing.Queue._feed do not break from main loop on exc Queue background running thread was not handling exceptions correctly. Any exception occurred inside thread (putting unpickable object) cause feeder to finish running. After that every message put into queue is silently ignored.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/_test_multiprocessing.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
index 3eb83c5..f1f9367 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -752,6 +752,20 @@ class _TestQueue(BaseTestCase):
# Windows (usually 15.6 ms)
self.assertGreaterEqual(delta, 0.170)
+ def test_queue_feeder_donot_stop_onexc(self):
+ # bpo-30414: verify feeder handles exceptions correctly
+ if self.TYPE != 'processes':
+ self.skipTest('test not appropriate for {}'.format(self.TYPE))
+
+ class NotSerializable(object):
+ def __reduce__(self):
+ raise AttributeError
+ with test.support.captured_stderr():
+ q = self.Queue()
+ q.put(NotSerializable())
+ q.put(True)
+ self.assertTrue(q.get(timeout=0.1))
+
#
#
#