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