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

Reply via email to