Issue #22585: os.urandom() now releases the GIL when the getentropy() is used
(OpenBSD 5.6+).
This commit is contained in:
parent
04d09ebd39
commit
9aa1331c6f
|
@ -78,16 +78,24 @@ py_getentropy(unsigned char *buffer, Py_ssize_t size, int fatal)
|
|||
{
|
||||
while (size > 0) {
|
||||
Py_ssize_t len = Py_MIN(size, 256);
|
||||
int res = getentropy(buffer, len);
|
||||
if (res < 0) {
|
||||
if (fatal) {
|
||||
Py_FatalError("getentropy() failed");
|
||||
}
|
||||
else {
|
||||
int res;
|
||||
|
||||
if (!fatal) {
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
res = getentropy(buffer, len);
|
||||
Py_END_ALLOW_THREADS
|
||||
|
||||
if (res < 0) {
|
||||
PyErr_SetFromErrno(PyExc_OSError);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
res = getentropy(buffer, len);
|
||||
if (res < 0)
|
||||
Py_FatalError("getentropy() failed");
|
||||
}
|
||||
|
||||
buffer += len;
|
||||
size -= len;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue