Hi,
I see frequent crashes in prunsrv.exe on Windows 10.
Here is a stack trace from a minidump:
ntdll.dll!00007ff903af6e1e() Unknown
AcLayers.dll!00007ff87cd77a56() Unknown
prunsrv.exe!HeapFREE(void * hHeap, unsigned long dwFlags, void *
lpMem) Line 71 C
prunsrv.exe!__apxPoolFreeCore(void * lpMem) Line 133 C
prunsrv.exe!apxFree(void * lpMem) Line 402 C
prunsrv.exe!__apxProcessCallback(stAPXHANDLE * hObject, unsigned int
uMsg, unsigned __int64 wParam, __int64 lParam) Line 396 C
prunsrv.exe!apxCloseHandle(stAPXHANDLE * hObject) Line 498 C
prunsrv.exe!__apxPoolCallback(stAPXHANDLE * hObject, unsigned int
uMsg, unsigned __int64 wParam, __int64 lParam) Line 190 C
prunsrv.exe!__apxPoolCallback(stAPXHANDLE * hObject, unsigned int
uMsg, unsigned __int64 wParam, __int64 lParam) Line 184 C
prunsrv.exe!apxCloseHandle(stAPXHANDLE * hObject) Line 498 C
prunsrv.exe!apxHandleManagerDestroy(...) Line 291 C
prunsrv.exe!main(int argc, char * * argv) Line 1830 C
I fixed it locally as follows, but I'm not sure if this is a good way to
fix it.
diff --git a/windows/src/handles.c b/windows/src/handles.c
index bdd573d..b90f677 100644
--- a/windows/src/handles.c
+++ b/windows/src/handles.c
@@ -286,6 +286,7 @@ apxHandleManagerDestroy()
if (--_st_sys_init == 0) {
hHeap = _st_sys_pool->hHeap;
+ _st_sys_pool->fnCallback = NULL;
apxCloseHandle(_st_sys_pool);
/* Destroy the main Heap */
HeapDESTROY(hHeap);
@@ -493,7 +494,8 @@ apxCloseHandle(APXHANDLE hObject)
if (IS_INVALID_HANDLE(hObject) || hObject->dwType ==
APXHANDLE_TYPE_INVALID)
return FALSE;
/* Call the user callback first */
- (*hObject->fnCallback)(hObject, WM_CLOSE, 0, 0);
+ if (*hObject->fnCallback)
+ (*hObject->fnCallback)(hObject, WM_CLOSE, 0, 0);
/* Now go through the callback chain */
TAILQ_FOREACH(lpCall, &hObject->lCallbacks, queue) {
(*lpCall->fnCallback)(hObject, WM_CLOSE, 0, 0);