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;