This actually looks better, but I suspect that the hang is now occurring because the reentrant windows proc is creating a condition where this thread is never getting a chance to be woken up. I didn't really expect this chance to make the oodialog problem go way, but rather to keep the internal interpreter state from getting corrupted.
Rick On Thu, Feb 4, 2010 at 8:29 PM, Mark Miesfeld <miesf...@gmail.com> wrote: > Rick, > > I tried your last commit. I can still get the same hang. > > (By the way, I coded up the thread local storage alternate solution > and it seems to work nicely. I'll post on that later.) > > Here is the stack trace from the RexxDlgProc thread, on 64-bit > Windows. It's long, but go all the way to the bottom of the stack. > The bottom entries look wrong. > > 0000000000000001() > 0000000000000081() > > Could there be a stack overflow? > > ntdll.dll!0000000077ef0faa() > [Frames below may be incorrect and/or missing, no symbols loaded for > ntdll.dll] > kernel32.dll!0000000077d6d03b() > user32.dll!0000000077c41ea7() > user32.dll!0000000077c3fb30() > rexx.dll!waitHandle(void * s=0x0000000000000178) Line 88 C++ > rexx.dll!SysSemaphore::wait() Line 104 C++ > rexx.dll!RexxActivity::waitForDispatch() Line 285 C++ > rexx.dll!ActivityManager::addWaitingActivity(RexxActivity * > waitingAct=0x000007ffff5f89f0, bool release=false) Line 168 C++ > rexx.dll!RexxActivity::requestAccess() Line 1915 C++ > rexx.dll!RexxActivity::enterCurrentThread() Line 202 C++ > rexx.dll!ApiContext::ApiContext(RexxThreadContext_ * > c=0x000007ffff5f8a18) Line 75 C++ > rexx.dll!UintptrToObject(RexxThreadContext_ * c=0x000007ffff5f8a18, > unsigned __int64 n=0x00000000000000c8) Line 619 C++ > oodialog.dll!RexxThreadContext_::Uintptr(unsigned __int64 > n=0x00000000000000c8) Line 867 C++ > oodialog.dll!idFrom2rexxArg(RexxThreadContext_ * > c=0x000007ffff5f8a18, __int64 lParam=0x00000000029ac0a0) Line 623 C++ > oodialog.dll!searchNotifyTable(unsigned __int64 > wParam=0x00000000000000c8, __int64 lParam=0x00000000029ac0a0, > _pbdCSelf * pcpbd=0x000007ffff5eab10) Line 924 C++ > oodialog.dll!searchMessageTables(unsigned long message=0x0000004e, > unsigned __int64 param=0x00000000000000c8, __int64 > lparam=0x00000000029ac0a0, _pbdCSelf * pcpbd=0x000007ffff5eab10) Line > 1306 C++ > oodialog.dll!RexxDlgProc(HWND__ * hDlg=0x000000000022033c, unsigned > int uMsg=0x0000004e, unsigned __int64 wParam=0x00000000000000c8, > __int64 lParam=0x00000000029ac0a0) Line 146 C++ > user32.dll!0000000077c34582() > user32.dll!0000000077c34bf2() > user32.dll!0000000077c5467c() > user32.dll!0000000077c43abc() > user32.dll!0000000077c4231f() > user32.dll!0000000077c423fd() > ntdll.dll!0000000077ef318f() > user32.dll!0000000077c420fa() > user32.dll!0000000077c3feed() > user32.dll!0000000077c4341b() > comctl32.dll!000007ff7f02c802() > comctl32.dll!000007ff7f0739f2() > comctl32.dll!000007ff7f075f1d() > comctl32.dll!000007ff7f077e6f() > comctl32.dll!000007ff7f076f87() > user32.dll!0000000077c43abc() > user32.dll!0000000077c4231f() > user32.dll!0000000077c423fd() > ntdll.dll!0000000077ef318f() > user32.dll!0000000077c408ba() > user32.dll!0000000077c408ec() > rexx.dll!waitHandle(void * s=0x0000000000000178) Line 83 C++ > rexx.dll!SysSemaphore::wait() Line 104 C++ > rexx.dll!RexxActivity::waitForDispatch() Line 285 C++ > rexx.dll!ActivityManager::addWaitingActivity(RexxActivity * > waitingAct=0x000007ffff5f89f0, bool release=false) Line 168 C++ > rexx.dll!RexxActivity::requestAccess() Line 1915 C++ > rexx.dll!RexxActivity::enterCurrentThread() Line 202 C++ > rexx.dll!ApiContext::ApiContext(RexxThreadContext_ * > c=0x000007ffff5f8a18) Line 75 C++ > rexx.dll!UintptrToObject(RexxThreadContext_ * c=0x000007ffff5f8a18, > unsigned __int64 n=0x00000000000000c8) Line 619 C++ > oodialog.dll!RexxThreadContext_::Uintptr(unsigned __int64 > n=0x00000000000000c8) Line 867 C++ > oodialog.dll!idFrom2rexxArg(RexxThreadContext_ * > c=0x000007ffff5f8a18, __int64 lParam=0x00000000029ad6e0) Line 623 C++ > oodialog.dll!searchNotifyTable(unsigned __int64 > wParam=0x00000000000000c8, __int64 lParam=0x00000000029ad6e0, > _pbdCSelf * pcpbd=0x000007ffff5eab10) Line 924 C++ > oodialog.dll!searchMessageTables(unsigned long message=0x0000004e, > unsigned __int64 param=0x00000000000000c8, __int64 > lparam=0x00000000029ad6e0, _pbdCSelf * pcpbd=0x000007ffff5eab10) Line > 1306 C++ > oodialog.dll!RexxDlgProc(HWND__ * hDlg=0x000000000022033c, unsigned > int uMsg=0x0000004e, unsigned __int64 wParam=0x00000000000000c8, > __int64 lParam=0x00000000029ad6e0) Line 146 C++ > user32.dll!0000000077c34582() > user32.dll!0000000077c34bf2() > user32.dll!0000000077c5467c() > user32.dll!0000000077c43abc() > user32.dll!0000000077c4231f() > user32.dll!0000000077c423fd() > ntdll.dll!0000000077ef318f() > user32.dll!0000000077c420fa() > user32.dll!0000000077c3feed() > user32.dll!0000000077c4341b() > comctl32.dll!000007ff7f02c802() > comctl32.dll!000007ff7f0739f2() > comctl32.dll!000007ff7f075f1d() > comctl32.dll!000007ff7f077e6f() > comctl32.dll!000007ff7f076f87() > user32.dll!0000000077c43abc() > user32.dll!0000000077c4231f() > user32.dll!0000000077c423fd() > ntdll.dll!0000000077ef318f() > user32.dll!0000000077c408ba() > user32.dll!0000000077c408ec() > rexx.dll!SysActivity::relinquish() Line 156 C++ > rexx.dll!ActivityManager::addWaitingActivity(RexxActivity * > waitingAct=0x000007ffff5f89f0, bool release=false) Line 165 C++ > rexx.dll!RexxActivity::requestAccess() Line 1915 C++ > rexx.dll!RexxActivity::enterCurrentThread() Line 202 C++ > rexx.dll!ApiContext::ApiContext(RexxThreadContext_ * > c=0x000007ffff5f8a18) Line 75 C++ > rexx.dll!ObjectToCSelf(RexxThreadContext_ * c=0x000007ffff5f8a18, > _RexxObjectPtr * o=0x000007fffecd2800) Line 576 C++ > oodialog.dll!RexxThreadContext_::ObjectToCSelf(_RexxObjectPtr * > o=0x000007fffecd2800) Line 847 C++ > oodialog.dll!RexxMethodContext_::ObjectToCSelf(_RexxObjectPtr * > o=0x000007fffecd2800) Line 1493 C++ > oodialog.dll!rxGetSize(RexxMethodContext_ * > context=0x00000000029ae318, _RexxObjectPtr * s=0x000007fffecd2800, int > argPos=0x00000002) Line 1023 C++ > oodialog.dll!dlgctrl_textSize_impl(RexxMethodContext_ * > context=0x00000000029ae318, const char * text=0x000007fffebb9df8, > _RexxObjectPtr * _size=0x000007fffecd2800, void * > pCSelf=0x000007ffff5f9b60) Line 900 C++ > oodialog.dll!dlgctrl_textSize(RexxMethodContext_ * > context=0x00000000029ae318, ValueDescriptor * > arguments=0x00000000029ae200) Line 895 C++ > rexx.dll!RexxNativeActivation::run(RexxMethod * > _method=0x000007fffedd5ef0, RexxNativeMethod * > _code=0x000007fffedd5eb0, RexxObject * _receiver=0x000007fffef77c70, > RexxString * _msgname=0x000007fffebb9d50, RexxObject * * > _arglist=0x000007fffe909098, unsigned __int64 > _argcount=0x0000000000000002, ProtectedObject & resultObj={...}) Line > 1226 C++ > rexx.dll!RexxNativeMethod::run(RexxActivity * > activity=0x000007ffff5f89f0, RexxMethod * method=0x000007fffedd5ef0, > RexxObject * receiver=0x000007fffef77c70, RexxString * > messageName=0x000007fffebb9d50, RexxObject * * > argPtr=0x000007fffe909098, unsigned __int64 count=0x0000000000000002, > ProtectedObject & result={...}) Line 279 C++ > rexx.dll!RexxMethod::run(RexxActivity * activity=0x000007ffff5f89f0, > RexxObject * receiver=0x000007fffef77c70, RexxString * > msgname=0x000007fffebb9d50, RexxObject * * argPtr=0x000007fffe909098, > unsigned __int64 count=0x0000000000000002, ProtectedObject & > result={...}) Line 324 C++ > rexx.dll!RexxObject::messageSend(RexxString * > msgname=0x000007fffebb9d50, RexxObject * * > arguments=0x000007fffe909098, unsigned __int64 > count=0x0000000000000002, ProtectedObject & result={...}) Line > 793 C++ > rexx.dll!RexxExpressionStack::send(RexxString * > message=0x000007fffebb9d50, unsigned __int64 count=0x0000000000000002, > ProtectedObject & result={...}) Line 74 C++ > rexx.dll!RexxInstructionMessage::execute(RexxActivation * > context=0x000007ffff7f9c40, RexxExpressionStack * > stack=0x000007ffff7f9d88) Line 229 C++ > rexx.dll!RexxActivation::run(RexxObject * > _receiver=0x000007ffff0bf990, RexxString * msgname=0x000007ffff7f9be0, > RexxObject * * _arglist=0x000007ffff7f9b80, unsigned __int64 > _argcount=0x0000000000000004, RexxInstruction * > start=0x0000000000000000, ProtectedObject & resultObj={...}) Line > 522 C++ > rexx.dll!RexxCode::run(RexxActivity * activity=0x000007ffff5f89f0, > RexxMethod * method=0x000007fffebba740, RexxObject * > receiver=0x000007ffff0bf990, RexxString * msgname=0x000007ffff7f9be0, > RexxObject * * argPtr=0x000007ffff7f9b80, unsigned __int64 > argcount=0x0000000000000004, ProtectedObject & result={...}) Line > 136 C++ > rexx.dll!RexxMethod::run(RexxActivity * activity=0x000007ffff5f89f0, > RexxObject * receiver=0x000007ffff0bf990, RexxString * > msgname=0x000007ffff7f9be0, RexxObject * * argPtr=0x000007ffff7f9b80, > unsigned __int64 count=0x0000000000000004, ProtectedObject & > result={...}) Line 324 C++ > rexx.dll!RexxObject::messageSend(RexxString * > msgname=0x000007ffff7f9be0, RexxObject * * > arguments=0x000007ffff7f9b80, unsigned __int64 > count=0x0000000000000004, ProtectedObject & result={...}) Line > 793 C++ > rexx.dll!RexxObject::sendMessage(RexxString * > message=0x000007ffff7f9be0, RexxArray * arguments=0x000007ffff7f9b30, > ProtectedObject & result={...}) Line 677 C++ > rexx.dll!RexxObject::sendMessage(RexxString * > message=0x000007ffff7f9be0, RexxArray * args=0x000007ffff7f9b30) Line > 611 C++ > rexx.dll!SendMessageArray(RexxThreadContext_ * c=0x000007ffff5f8a18, > _RexxObjectPtr * o=0x000007ffff0bf990, const char * > m=0x00000000000e1790, _RexxArrayObject * a=0x000007ffff7f9b30) Line > 157 C++ >> oodialog.dll!RexxThreadContext_::SendMessageA(_RexxObjectPtr * >> o=0x000007ffff0bf990, const char * msg=0x00000000000e1790, _RexxArrayObject >> * arr=0x000007ffff7f9b30) Line 732 C++ > oodialog.dll!searchNotifyTable(unsigned __int64 > wParam=0x00000000000000c8, __int64 lParam=0x00000000029af490, > _pbdCSelf * pcpbd=0x000007ffff5eab10) Line 995 C++ > oodialog.dll!searchMessageTables(unsigned long message=0x0000004e, > unsigned __int64 param=0x00000000000000c8, __int64 > lparam=0x00000000029af490, _pbdCSelf * pcpbd=0x000007ffff5eab10) Line > 1306 C++ > oodialog.dll!RexxDlgProc(HWND__ * hDlg=0x000000000022033c, unsigned > int uMsg=0x0000004e, unsigned __int64 wParam=0x00000000000000c8, > __int64 lParam=0x00000000029af490) Line 146 C++ > user32.dll!0000000077c34582() > user32.dll!0000000077c34bf2() > user32.dll!0000000077c5467c() > user32.dll!0000000077c43abc() > user32.dll!0000000077c4231f() > user32.dll!0000000077c423fd() > ntdll.dll!0000000077ef318f() > user32.dll!0000000077c420fa() > user32.dll!0000000077c3feed() > user32.dll!0000000077c4341b() > comctl32.dll!000007ff7f02c802() > comctl32.dll!000007ff7f073c02() > comctl32.dll!000007ff7f0748a0() > comctl32.dll!000007ff7f076146() > comctl32.dll!000007ff7f078a7b() > comctl32.dll!000007ff7f078ea5() > comctl32.dll!000007ff7f076ed8() > 0000000b00000048() > 0000000000000087() > 0000000000102300() > 00000000000b0048() > 0000000000000001() > 0000000000000081() > > -- > Mark Miesfeld > > ------------------------------------------------------------------------------ > The Planet: dedicated and managed hosting, cloud storage, colocation > Stay online with enterprise data centers and the best network in the business > Choose flexible plans and management services without long-term contracts > Personal 24x7 support from experience hosting pros just a phone call away. > http://p.sf.net/sfu/theplanet-com > _______________________________________________ > Oorexx-devel mailing list > Oorexx-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > ------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ Oorexx-devel mailing list Oorexx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/oorexx-devel