[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