While continuing to rerun the ProgressDialog crash test case and peeking around 
the stack traces, I
just hit a strange situation:

here just the top three entries):

    >   rexx.dll!ActivationFrame::ActivationFrame(Activity * a=0x00000000) Line 
62      C++
        rexx.dll!NativeActivationFrame::NativeActivationFrame(Activity * 
a=0x00000000, NativeActivation * context=0x7e2736a8) Line 110  C++
        rexx.dll!NativeActivation::callNativeRoutine(RoutineClass * 
_routine=0x7dc99a38, NativeRoutine * _code=0x7dc99a18, RexxString * 
functionName=0x7dc88378, RexxObject * * list=0x7d8ad100, unsigned int count=0, 
ProtectedObject & resultObj={...}) Line 1339     C++
       ... cut ...

In callNativeRoutine(...) the statement that gets executed is:

    NativeActivationFrame frame(activity, this);

"activity" and "this" have a value. However, when going to the next frame the 
debugger points to:

       inline NativeActivationFrame(Activity *a, NativeActivation *context) : 
ActivationFrame(a), activation(context) { }

where "a" is NULL, which causes in the top frame the null pointer exception! 
the "context" has the
value of the caller. As a result the statement in the top frame causes the 
crash:

           next = activity->activationFrames;

It is as if the argument "activity" pointing to a seemingly existing activity 
in callNativeRoutine()
is not "arriving" in the inline ActivationFrame(), rather NULL arrives!

There are four rexx.dll threads:

  *

    Not Flagged          8704   0       Worker Thread   
rexx.dll!TimeSliceControl()                    rexx.dll!TimeSliceControl       
                        Above Normal

  *

    Not Flagged          7912   0       Worker Thread   
msvcr100.dll!_threadstartex             rexx.dll!waitHandle                     
                Normal 

  *

    Not Flagged    >    8396    0       Worker Thread   
rexx.dll!dispatch_activity_function()  
rexx.dll!ActivationFrame::ActivationFrame       Normal

  *

    Not Flagged    7024 0       Worker Thread   
rexx.dll!dispatch_activity_function()  rexx.dll!waitHandle                     
                Normal

---

Not sure, whether this is really helpful. Nevertheless I will keep the debug 
window open in case
further information should be taken from the Visual Studio debugger. (Will have 
to leave in a few
minutes, but thought I report this observation, in case it helps shed light.)

---rony

P.S.: Also, I have test-debug output with the hex values for each Rexx 
interpreter instance and Rexx
thread context plus the numbers for the thread ids which match the debugger 
values.

In addition, I created a version of it that has symbolic names RI-1 (for Rexx 
interpreter # 1, the
primodal interpreter), RTC-2 (Rexx thread context 2, the second one created) 
and TID-1 (the first
created thread). Actually, I wrote a program to rewrite the log outputs to make 
them easier to read
and to understand, together with cross-references in which TID which RIs and 
RTCs got used and the
like. (It would be great if ooRexx would be able to name these resources, i.e. 
RII, TID and RTC, and
to retrieve those symbolic names at runtime as it really helps a *lot* when 
looking through the log
output.)



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to