diff -u -r cpython-f477ce0d2345.orig/Python/random.c cpython-f477ce0d2345.new/Python/random.c --- cpython-f477ce0d2345.orig/Python/random.c 2016-06-07 10:25:43.000000000 +0100 +++ cpython-f477ce0d2345.new/Python/random.c 2016-06-07 15:10:55.198368530 +0100 @@ -120,7 +120,7 @@ #define PY_GETRANDOM 1 static int -py_getrandom(void *buffer, Py_ssize_t size, int raise) +py_getrandom(void *buffer, Py_ssize_t size, int raise, int nonblocking) { /* Is getrandom() supported by the running kernel? * Need Linux kernel 3.17 or newer, or Solaris 11.3 or newer */ @@ -131,7 +131,7 @@ * to hang on startup if called very early in the boot process - * see https://bugs.python.org/issue26839. To avoid this, use the * GRND_NONBLOCK flag. */ - const int flags = GRND_NONBLOCK; + const int flags = nonblocking ? GRND_NONBLOCK : 0; int n; if (!getrandom_works) @@ -229,7 +229,7 @@ assert (0 < size); #ifdef PY_GETRANDOM - if (py_getrandom(buffer, size, 0) == 1) + if (py_getrandom(buffer, size, 0, 1) == 1) return; /* getrandom() is not supported by the running kernel, fall back * on reading /dev/urandom */ @@ -272,7 +272,7 @@ return 0; #ifdef PY_GETRANDOM - res = py_getrandom(buffer, size, 1); + res = py_getrandom(buffer, size, 1, 0); if (res < 0) return -1; if (res == 1)