You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Lode Leroy <lo...@gmail.com> on 2019/05/24 14:02:30 UTC
crash in prunsrv
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);
Re: crash in prunsrv
Posted by Gary Gregory <ga...@gmail.com>.
Which version of Commons Daemon are you using?
Gary
On Fri, May 24, 2019 at 10:33 AM Lode Leroy <lo...@gmail.com> wrote:
> 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);
>