From dce343b488af6e0272f126eafe63603f374a6d01 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 16 Oct 2020 18:11:44 +0530 Subject: [PATCH] Release GIL while creating hardlinks --- src/calibre/utils/windows/winutil.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/calibre/utils/windows/winutil.cpp b/src/calibre/utils/windows/winutil.cpp index b0c59552e4..300fb3b977 100644 --- a/src/calibre/utils/windows/winutil.cpp +++ b/src/calibre/utils/windows/winutil.cpp @@ -526,7 +526,11 @@ static PyObject* winutil_create_hard_link(PyObject *self, PyObject *args) { wchar_raii path, existing_path; if (!PyArg_ParseTuple(args, "O&O&", py_to_wchar_no_none, &path, py_to_wchar_no_none, &existing_path)) return NULL; - if (!CreateHardLinkW(path.ptr(), existing_path.ptr(), NULL)) return PyErr_SetExcFromWindowsErrWithFilenameObjects(PyExc_OSError, 0, PyTuple_GET_ITEM(args, 0), PyTuple_GET_ITEM(args, 1)); + BOOL ok; + Py_BEGIN_ALLOW_THREADS + ok = CreateHardLinkW(path.ptr(), existing_path.ptr(), NULL); + Py_END_ALLOW_THREADS + if (!ok) return PyErr_SetExcFromWindowsErrWithFilenameObjects(PyExc_OSError, 0, PyTuple_GET_ITEM(args, 0), PyTuple_GET_ITEM(args, 1)); Py_RETURN_NONE; }