From time to time I get crashes upon exiting multithreaded programs on Windows. The crash occurs in
ANSI32.dll. However, when using a debug version of ooRexx these crashes usually do not show up.
Today, I ran a few ooDialog samples ("ooRexx\samples\oodialog\examples") with a debug version of
32-bit ooRexx r12371 and received such a crash upon exiting the sample "browsePrinters.rex" ("pure
ooRexx").
Here the command-line window output until the crash:
C:\Program Files (x86)\ooRexx\samples\oodialog\examples>browsePrinters.rex
CoInitializeEx returns: 0x00000000
*uninitCom() thread ID=29020*
CoInitializeEx returns: 0x00000000
Using MSVS here the 18 threads at the time of the crash:
Not Flagged 30384 0 Main Thread Main Thread
win32u.dll!_NtUserMsgWaitForMultipleObjectsEx@20 Normal
Not Flagged 21996 0 Worker Thread
ntdll.dll!TppWorkerThread ntdll.dll!_NtWaitForWorkViaWorkerFactory@20
Normal
Not Flagged 30556 0 Worker Thread
ntdll.dll!TppWorkerThread ntdll.dll!_NtWaitForWorkViaWorkerFactory@20
Normal
Not Flagged 11160 0 Worker Thread
ntdll.dll!TppWorkerThread ntdll.dll!_NtWaitForWorkViaWorkerFactory@20
Normal
Not Flagged 4272 0 Worker Thread
oodialog.dll!WindowUsrLoopThread() win32u.dll!_NtUserGetMessage@16 Above
Normal
*Not Flagged 29020 0 Worker Thread rexx.dll!dispatch_activity_function()
win32u.dll!_NtUserWaitMessage@0 Normal*
Not Flagged 13548 0 Worker Thread
combase.dll!CRpcThreadCache::RpcWorkerThreadEntry
combase.dll!WaitCoalesced Normal
Not Flagged 5788 0 Worker Thread
ntdll.dll!TppWorkerThread
win32u.dll!_NtUserMsgWaitForMultipleObjectsEx@20 Normal
Not Flagged 17300 0 Worker Thread
ntdll.dll!TppWorkerThread
win32u.dll!_NtUserMsgWaitForMultipleObjectsEx@20 Normal
*Not Flagged > 28868 0 Worker Thread ntdll.dll!TppWorkerThread
ANSI32.dll!581d2536 Normal*
Not Flagged 14316 0 Worker Thread
ntdll.dll!TppWorkerThread
win32u.dll!_NtUserMsgWaitForMultipleObjectsEx@20 Normal
Not Flagged 8912 0 Worker Thread
ntdll.dll!TppWorkerThread ntdll.dll!_NtWaitForWorkViaWorkerFactory@20
Normal
Not Flagged 25228 0 Worker Thread
ntdll.dll!TppWorkerThread
win32u.dll!_NtUserMsgWaitForMultipleObjectsEx@20 Normal
Not Flagged 29080 0 Worker Thread
ntdll.dll!TppWorkerThread ntdll.dll!_NtWaitForWorkViaWorkerFactory@20
Normal
Not Flagged 30196 0 Worker Thread
ntdll.dll!TppWorkerThread ntdll.dll!_NtWaitForWorkViaWorkerFactory@20
Normal
Not Flagged 19288 0 Worker Thread
ntdll.dll!TppWorkerThread ntdll.dll!_NtWaitForWorkViaWorkerFactory@20
Normal
Not Flagged 29544 0 Worker Thread
ntdll.dll!TppWorkerThread ntdll.dll!_NtWaitForWorkViaWorkerFactory@20
Normal
Not Flagged 15268 0 Worker Thread prncache.dll thread
prncache.dll!580373d7 Normal
The call stack for the rexx thread 29020 is:
win32u.dll!_NtUserWaitMessage@0() Unknown
user32.dll!DialogBox2() Unknown
user32.dll!InternalDialogBox() Unknown
user32.dll!_DialogBoxIndirectParamAorW@24() Unknown
user32.dll!_DialogBoxParamW@20() Unknown
shell32.dll!_SHFusionDialogBoxParam@20() Unknown
shell32.dll!CBrowseForFolder::DisplayDialog(struct BFSF *) Unknown
shell32.dll!SHBrowseForFolder2(struct BFSF *) Unknown
shell32.dll!_SHBrowseForFolderA@4() Unknown
*> oodialog.dll!folderBrowse(RexxMethodContext_ * context=0x05c3f9d8,
_browseinfoA *
pBI=0x05c3f940, bool returnPath=false) Line 848 C+*+
oodialog.dll!bffGetFolderOrIDL(RexxMethodContext_ * c=0x05c3f9d8, void
* pCSelf=0x031892e8, unsigned int reuse=1, bool getPath=false) Line 950 C++
oodialog.dll!bff_getItemIDList_impl(RexxMethodContext_ *
context=0x05c3f9d8, unsigned int reuse=1, void * pCSelf=0x031892e8) Line 1414
C++
oodialog.dll!bff_getItemIDList(RexxMethodContext_ * context=0x05c3f9d8,
_ValueDescriptor * arguments=0x05c3f9f0) Line 1412 C++
rexx.dll!NativeActivation::run(MethodClass * _method=0x0318e520,
NativeMethod * _code=0x0318e500, RexxObject * _receiver=0x02e7c2c8, RexxString *
_msgname=0x02d7ba78, RexxObject * * _arglist=0x010ea8fc, unsigned int _argcount=1,
ProtectedObject & resultObj={...}) Line 1306 C++
rexx.dll!NativeMethod::run(Activity * activity=0x030c6cf0, MethodClass *
method=0x0318e520, RexxObject * receiver=0x02e7c2c8, RexxString *
messageName=0x02d7ba78, RexxObject * * argPtr=0x010ea8fc, unsigned int count=1,
ProtectedObject & result={...}) Line 329 C++
rexx.dll!MethodClass::run(Activity * activity=0x030c6cf0, RexxObject *
receiver=0x02e7c2c8, RexxString * msgname=0x02d7ba78, RexxObject * *
argPtr=0x010ea8fc, unsigned int count=1, ProtectedObject & result={...}) Line
171 C++
rexx.dll!RexxObject::messageSend(RexxString * msgname=0x02d7ba78,
RexxObject * * arguments=0x010ea8fc, unsigned int count=1, ProtectedObject &
result={...}) Line 902 C++
rexx.dll!ExpressionStack::send(RexxString * message=0x02d7ba78, unsigned
int count=1, ProtectedObject & result={...}) Line 80 C++
rexx.dll!RexxExpressionMessage::evaluate(RexxActivation *
context=0x03000458, ExpressionStack * stack=0x03000530) Line 191 C++
rexx.dll!RexxInstructionAssignment::execute(RexxActivation *
context=0x03000458, ExpressionStack * stack=0x03000530) Line 129 C++
rexx.dll!RexxActivation::run(RexxObject * _receiver=0x03011c00, RexxString
* name=0x03197eb0, RexxObject * * _arglist=0x03056a98, unsigned int _argcount=5,
RexxInstruction * start=0x00000000, ProtectedObject & resultObj={...}) Line 591
C++
rexx.dll!RexxCode::run(Activity * activity=0x030c6cf0, MethodClass *
method=0x02d7d008, RexxObject * receiver=0x03011c00, RexxString *
msgname=0x03197eb0, RexxObject * * argPtr=0x03056a98, unsigned int argcount=5,
ProtectedObject & result={...}) Line 211 C++
rexx.dll!MethodClass::run(Activity * activity=0x030c6cf0, RexxObject *
receiver=0x03011c00, RexxString * msgname=0x03197eb0, RexxObject * *
argPtr=0x03056a98, unsigned int count=5, ProtectedObject & result={...}) Line
171 C++
rexx.dll!RexxObject::messageSend(RexxString * msgname=0x03197eb0,
RexxObject * * arguments=0x03056a98, unsigned int count=5, ProtectedObject &
result={...}) Line 902 C++
rexx.dll!MessageClass::dispatch() Line 446 C++
rexx.dll!MessageDispatcher::run() Line 55 C++
rexx.dll!NativeActivation::run(ActivityDispatcher & dispatcher={...})
Line 1641 C++
rexx.dll!Activity::run(ActivityDispatcher & target={...}) Line 3314 C++
rexx.dll!Activity::runThread() Line 217 C++
rexx.dll!dispatch_activity_function(void * arguments=0x030c6cf0) Line
66 C++
kernel32.dll!@BaseThreadInitThunk@12() Unknown
ntdll.dll!__RtlUserThreadStart() Unknown
ntdll.dll!__RtlUserThreadStart@8() Unknown
Just for completeness the call stack for thread 28868:
*> ANSI32.dll!581d2536() Unknown*
[Frames below may be incorrect and/or missing, no symbols loaded for
ANSI32.dll]
ANSI32.dll!581d273f() Unknown
ANSI32.dll!581d2d93() Unknown
prnfldr.dll!580f88e9() Unknown
prnfldr.dll!580f87d9() Unknown
prnfldr.dll!580f8725() Unknown
prnfldr.dll!580f8389() Unknown
windows.storage.dll!72ab086a() Unknown
windows.storage.dll!72ab087f() Unknown
windows.storage.dll!72b5b26c() Unknown
windows.storage.dll!72b57949() Unknown
prnfldr.dll!580ff19b() Unknown
prnfldr.dll!580fee87() Unknown
windows.storage.dll!72b5b26c() Unknown
KernelBase.dll!QISearch() Unknown
windows.storage.dll!72ac6d37() Unknown
prnfldr.dll!580ff19b() Unknown
prnfldr.dll!580fee87() Unknown
windows.storage.dll!72b3ed00() Unknown
windows.storage.dll!72ac87d4() Unknown
KernelBase.dll!QISearch() Unknown
shell32.dll!_SHCreateItemWithParent@20() Unknown
shell32.dll!GetExtractIconW(struct IShellFolder *,struct _ITEMID_CHILD
const *,unsigned int,struct IExtractIconW * *) Unknown
shell32.dll!_GetILIndexFromItem(struct IShellFolder *,struct
_ITEMID_CHILD const *,unsigned int,int *) Unknown
shell32.dll!_SHGetIconIndexFromPIDL@20() Unknown
shell32.dll!_SHIconIndexFromPIDL@16() Unknown
ExplorerFrame.dll!57e45810() Unknown
ExplorerFrame.dll!57e47c98() Unknown
windows.storage.dll!72b37a98() Unknown
windows.storage.dll!72b376bc() Unknown
windows.storage.dll!72b3747e() Unknown
SHCore.dll!_ExecuteWorkItemThreadProc@4() Unknown
ntdll.dll!RtlpTpWorkCallback() Unknown
ntdll.dll!TppWorkerThread() Unknown
kernel32.dll!@BaseThreadInitThunk@12() Unknown
ntdll.dll!__RtlUserThreadStart() Unknown
ntdll.dll!__RtlUserThreadStart@8() Unknown
In the case additional information is needed I keep the crashed process up in
MSVS for a while.
---rony
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel