From 61d5aab9b9fc81ca8801d94af8032414f745b8c2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 30 Jul 2015 10:13:52 +0200 Subject: [PATCH] py_getrandom(): getrandom() *can* return EINTR See the latest version of getrandom() manual page: http://man7.org/linux/man-pages/man2/getrandom.2.html#NOTES The behavior when a call to getrandom() that is blocked while reading from /dev/urandom is interrupted by a signal handler depends on the initialization state of the entropy buffer and on the request size, buflen. If the entropy is not yet initialized, then the call will fail with the EINTR error. If the entropy pool has been initialized and the request size is large (buflen > 256), the call either succeeds, returning a partially filled buffer, or fails with the error EINTR. If the entropy pool has been initialized and the request size is small (buflen <= 256), then getrandom() will not fail with EINTR. Instead, it will return all of the bytes that have been requested. Note: py_getrandom() calls getrandom() with flags=0. --- Python/random.c | 1 - 1 file changed, 1 deletion(-) diff --git a/Python/random.c b/Python/random.c index 9c9d5057c9b..ea09e84a7b0 100644 --- a/Python/random.c +++ b/Python/random.c @@ -142,7 +142,6 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) } if (errno == EINTR) { - /* Note: EINTR should not occur with flags=0 */ if (PyErr_CheckSignals()) { if (!raise) Py_FatalError("getrandom() interrupted by a signal");