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

Reply via email to