diff options
author | Tony Roberts <tony@pyxll.com> | 2019-02-02 17:16:42 (GMT) |
---|---|---|
committer | Steve Dower <steve.dower@microsoft.com> | 2019-02-02 17:16:42 (GMT) |
commit | 4860f01ac0f07cdc8fc0cc27c33f5a64e5cfec9f (patch) | |
tree | 18e9232f27d8bee1c9a8139937b69ec013a19abf /Modules/overlapped.c | |
parent | 2de576e16d42ce43698d384d0dd46ba6cf165424 (diff) | |
download | cpython-4860f01ac0f07cdc8fc0cc27c33f5a64e5cfec9f.zip cpython-4860f01ac0f07cdc8fc0cc27c33f5a64e5cfec9f.tar.gz cpython-4860f01ac0f07cdc8fc0cc27c33f5a64e5cfec9f.tar.bz2 |
bpo-33895: Relase GIL while calling functions that acquire Windows loader lock (GH-7789)
LoadLibrary, GetProcAddress, FreeLibrary and GetModuleHandle acquire the system loader lock. Calling these while holding the GIL will cause a deadlock on the rare occasion that another thread is detaching and needs to destroy its thread state at the same time.
Diffstat (limited to 'Modules/overlapped.c')
-rw-r--r-- | Modules/overlapped.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/Modules/overlapped.c b/Modules/overlapped.c index ef4390b..e5a209b 100644 --- a/Modules/overlapped.c +++ b/Modules/overlapped.c @@ -127,8 +127,10 @@ initialize_function_pointers(void) closesocket(s); /* On WinXP we will have Py_CancelIoEx == NULL */ + Py_BEGIN_ALLOW_THREADS hKernel32 = GetModuleHandle("KERNEL32"); *(FARPROC *)&Py_CancelIoEx = GetProcAddress(hKernel32, "CancelIoEx"); + Py_END_ALLOW_THREADS return 0; } |