static int
_hacl_convert_errno(hacl_errno_t code, PyObject *algorithm)
{
+ assert(PyGILState_GetThisThreadState() != NULL);
+ if (code == Hacl_Streaming_Types_Success) {
+ return 0;
+ }
+
+ PyGILState_STATE gstate = PyGILState_Ensure();
switch (code) {
- case Hacl_Streaming_Types_Success: {
- return 0;
- }
case Hacl_Streaming_Types_InvalidAlgorithm: {
// only makes sense if an algorithm is known at call time
assert(algorithm != NULL);
assert(PyUnicode_CheckExact(algorithm));
PyErr_Format(PyExc_ValueError, "invalid algorithm: %U", algorithm);
- return -1;
+ break;
}
case Hacl_Streaming_Types_InvalidLength: {
PyErr_SetString(PyExc_ValueError, "invalid length");
- return -1;
+ break;
}
case Hacl_Streaming_Types_MaximumLengthExceeded: {
PyErr_SetString(PyExc_OverflowError, "maximum length exceeded");
- return -1;
+ break;
}
case Hacl_Streaming_Types_OutOfMemory: {
PyErr_NoMemory();
- return -1;
+ break;
}
default: {
PyErr_Format(PyExc_RuntimeError,
"HACL* internal routine failed with error code: %d",
code);
- return -1;
+ break;
}
}
+ PyGILState_Release(gstate);
+ return -1;
}
/*