From 5af81d105c559e769e5bafe4dc9ad10b478ae56f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 8 Oct 2020 16:55:26 +0530 Subject: [PATCH] Release the GIL when calling ReadFile --- src/calibre/utils/windows/winutilpp.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/calibre/utils/windows/winutilpp.cpp b/src/calibre/utils/windows/winutilpp.cpp index 124b036e86..4c60763d9a 100644 --- a/src/calibre/utils/windows/winutilpp.cpp +++ b/src/calibre/utils/windows/winutilpp.cpp @@ -192,7 +192,11 @@ winutil_read_file(PyObject *self, PyObject *args) { PyObject *ans = PyBytes_FromStringAndSize(NULL, chunk_size); if (!ans) return PyErr_NoMemory(); DWORD bytes_read; - if (!ReadFile(PyLong_AsVoidPtr(handle), PyBytes_AS_STRING(ans), chunk_size, &bytes_read, NULL)) { + BOOL ok; + Py_BEGIN_ALLOW_THREADS; + ok = ReadFile(PyLong_AsVoidPtr(handle), PyBytes_AS_STRING(ans), chunk_size, &bytes_read, NULL); + Py_END_ALLOW_THREADS; + if (!ok) { Py_DECREF(ans); return set_error_from_file_handle(PyLong_AsVoidPtr(handle)); }