[Python-checkins] cpython: Issue #23680: Reduce risk of race condition in check_interrupted_write_retry()

victor.stinner python-checkins at python.org
Mon Mar 16 17:58:35 CET 2015


https://hg.python.org/cpython/rev/a18f7508649b
changeset: 95008:a18f7508649b
user: Victor Stinner <victor.stinner at gmail.com>
date: Mon Mar 16 17:57:49 2015 +0100
summary:
 Issue #23680: Reduce risk of race condition in check_interrupted_write_retry()
of test_io. Allocate the large data before scheduling an alarm in 1 second.
On very slow computer, the alarm rings sometimes during the memory allocation.
files:
 Lib/test/test_io.py | 9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -3544,11 +3544,13 @@
 returning a partial result or EINTR), properly invokes the signal
 handler and retries if the latter returned successfully."""
 select = support.import_module("select")
+
 # A quantity that exceeds the buffer size of an anonymous pipe's
 # write end.
 N = support.PIPE_MAX_SIZE
 r, w = os.pipe()
 fdopen_kwargs["closefd"] = False
+
 # We need a separate thread to read from the pipe and allow the
 # write() to finish. This thread is started after the SIGALRM is
 # received (forcing a first EINTR in write()).
@@ -3566,6 +3568,8 @@
 signal.alarm(1)
 def alarm2(sig, frame):
 t.start()
+
+ large_data = item * N
 signal.signal(signal.SIGALRM, alarm1)
 try:
 wio = self.io.open(w, **fdopen_kwargs)
@@ -3575,10 +3579,13 @@
 # and the first alarm)
 # - second raw write() returns EINTR (because of the second alarm)
 # - subsequent write()s are successful (either partial or complete)
- self.assertEqual(N, wio.write(item * N))
+ written = wio.write(large_data)
+ self.assertEqual(N, written)
+
 wio.flush()
 write_finished = True
 t.join()
+
 self.assertEqual(N, sum(len(x) for x in read_results))
 finally:
 write_finished = True
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /