Rick McGuire wrote: > 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. > In the scenario that rexx.exe is used to run the program (which then fails), no RexxCreateInterpreter() is carried out by BSF4Rexx.
---rony > 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