The other possibility is you've called RexxCreateInterpreter() on a
thread that was already owned by Rexx.  In that case, the
RexxThreadContext returned with the instance pushes down the active
one and can create the same symptoms if you return without destroying
the instance.  In that situation, you should either create the
instance on a separate thread or just "inherit" the instance of the
program that called you in the first place.

Rick

On Mon, May 25, 2009 at 5:08 AM, Rony G. Flatscher
<rony.flatsc...@wu-wien.ac.at> wrote:
> Rick,
>
> when invoking that program via Java, then it works without a problem!
>
> If invoked via Java then in the native layer an AttachThread() is invoked, a
> Routine object is created and invoked with CallRoutine(), followed by a
> matching DetachThread().
>
> ---rony
>
>
>
> Rony G. Flatscher wrote:
>
> Rick McGuire wrote:
>
> I just thought of one more thing that could cause the error you're
> seeing.  If you do an AttachThread() at some point and neglect to do a
> corresponding DetachThread() before returning to your caller, you'll
> end up with a corrupted activaation stack that will result in problems
> with legacy callback APIs like RexxVariablePool or RexxStemSort.
> What;s showing up in this traceback very much appears to match what
> might happen in that sort of situation.
>
>
> In this particular program an external function BSF(), defined as
>
> RexxRoutine1(RexxObjectPtr, BSF, ARGLIST, argArray) {...}
>
>
> gets invoked to communicate to the Java side. There are no calls from Java
> into BSF4Rexx occurring, hence there AttachThread() and DetachThread() are
> not invoked in this case (at least not from BSF4Rexx).
>
> Also, BSF4Rexx in this case does not excercise any variable gets or sets. It
> just interacts with Java and returns a (string) value back, which gets
> stored in the stem.
>
> ---rony
>
> P.S.: Just for completeness, here is the Rexx program in question:
>
> /* classic Rexx version, ---rgf, 2003-02, 2003-05-10, 2003-09-04, 2005-12-28
> */
>
> /* this version works on Java 1.1 too (because using "wrapEnumeration()") */
>
>       /* load the BSF4Rexx functions and start a JVM, if necessary */
> if rxFuncQuery("BSF") = 1 then   /* BSF() support not loaded yet ? */
> do
>    call rxFuncAdd "BsfLoadFuncs", "BSF4Rexx", "BsfLoadFuncs"
>    call BsfLoadFuncs          /* load all BSF*() functions  */
>    call BsfLoadJava           /* load Java                  */
> end
>
>    /* 'Class.class' is pre-registered for Rexx, cf. docs */
> system=bsf('invoke', 'Class.class', 'forName', 'java.lang.System')
>
> properties=bsf('invoke', system, "getProperties")  /* get the System
> properties  */
>
> enum=bsf('invoke', properties, 'propertyNames')    /* get an enumeration of
> the property names */
>
>    /* wrap the Enumeration object, so Java 1.1 can handle this too (overcome
> Java inner class access restriction) */
>    /* the following statement is *not* necessary for Java >= 1.2 */
> enum=bsf('wrapEnumeration', enum)
>
> say copies("=", 70)
>
> stem. = 0
> deli  = "010203"x
> do i=1 to 5000 while bsf('invoke', enum, 'hasMoreElements') /* loop over
> enumeration   */
>    key=bsf('invoke', enum, 'nextElement')
>    stem.i= key || deli || bsf('invoke', properties, 'getProperty', key)
>    stem.0=i       /* remember total of elements */
> end
>
> say stem.0 "elements, now sorting..."
> call sysStemSort "stem."
>
> l=length(stem.0)
> do i=1 to stem.0
>    parse var stem.i key (deli) val
>    say i~right(l)":" pp(key)~left(31)"="pp(val)
> end
>
> exit
>
> pp: procedure
>    return "[" || arg(1) || "]"
>
>
> ------------------------------------------------------------------------------
> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
> is a gathering of tech-side developers & brand creativity professionals.
> Meet
> the minds behind Google Creative Lab, Visual Complexity, Processing, &
> iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
> Group, R/GA, & Big Spaceship. http://www.creativitycat.com
> _______________________________________________
> Oorexx-devel mailing list
> Oorexx-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel
>
>

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://www.creativitycat.com 
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to