changeset: 95292:28b465d8c519 user: Victor Stinner date: Mon Mar 30 11:16:40 2015 +0200 files: Python/random.c description: Issue #22181: os.urandom() now releases the GIL when the getrandom() implementation is used. diff -r e46c3138b5b3 -r 28b465d8c519 Python/random.c --- a/Python/random.c Mon Mar 30 01:56:27 2015 -0700 +++ b/Python/random.c Mon Mar 30 11:16:40 2015 +0200 @@ -115,9 +115,18 @@ while (0 < size) { errno = 0; - /* the libc doesn't expose getrandom() yet, see: + + /* Use syscall() because the libc doesn't expose getrandom() yet, see: * https://sourceware.org/bugzilla/show_bug.cgi?id=17252 */ - n = syscall(SYS_getrandom, buffer, size, flags); + if (raise) { + Py_BEGIN_ALLOW_THREADS + n = syscall(SYS_getrandom, buffer, size, flags); + Py_END_ALLOW_THREADS + } + else { + n = syscall(SYS_getrandom, buffer, size, flags); + } + if (n < 0) { if (errno == ENOSYS) { getrandom_works = 0;