changeset: 100564:73d8adc0d5ea branch: 3.5 parent: 100555:e95e9701b472 user: Victor Stinner date: Wed Mar 16 23:25:02 2016 +0100 files: Modules/overlapped.c description: Fix usage of PyMem_Malloc() in overlapped.c Issue #26563: Replace PyMem_Malloc() with PyMem_RawFree() since PostToQueueCallback() calls PyMem_RawFree() (previously PyMem_Free()) in a new C thread which doesn't hold the GIL. diff -r e95e9701b472 -r 73d8adc0d5ea Modules/overlapped.c --- a/Modules/overlapped.c Thu Mar 17 06:42:48 2016 +0000 +++ b/Modules/overlapped.c Wed Mar 16 23:25:02 2016 +0100 @@ -238,7 +238,7 @@ PostQueuedCompletionStatus(p->CompletionPort, TimerOrWaitFired, 0, p->Overlapped); /* ignore possible error! */ - PyMem_Free(p); + PyMem_RawFree(p); } PyDoc_STRVAR( @@ -262,7 +262,10 @@ &Milliseconds)) return NULL; - pdata = PyMem_Malloc(sizeof(struct PostCallbackData)); + /* Use PyMem_RawMalloc() rather than PyMem_Malloc(), since + PostToQueueCallback() will call PyMem_Free() from a new C thread + which doesn't hold the GIL. */ + pdata = PyMem_RawMalloc(sizeof(struct PostCallbackData)); if (pdata == NULL) return SetFromWindowsErr(0); @@ -273,7 +276,7 @@ pdata, Milliseconds, WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE)) { - PyMem_Free(pdata); + PyMem_RawFree(pdata); return SetFromWindowsErr(0); }