You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
|
Feb
|
Mar
(2) |
Apr
(4) |
May
(35) |
Jun
(6) |
Jul
(23) |
Aug
(25) |
Sep
|
Oct
(72) |
Nov
(25) |
Dec
(13) |
2006 |
Jan
(104) |
Feb
(19) |
Mar
(43) |
Apr
(19) |
May
(62) |
Jun
(133) |
Jul
(44) |
Aug
(46) |
Sep
(68) |
Oct
(45) |
Nov
(97) |
Dec
(19) |
2007 |
Jan
(75) |
Feb
(232) |
Mar
(116) |
Apr
(368) |
May
(111) |
Jun
(134) |
Jul
(97) |
Aug
(107) |
Sep
(173) |
Oct
(579) |
Nov
(256) |
Dec
(213) |
2008 |
Jan
(242) |
Feb
(73) |
Mar
(26) |
Apr
(13) |
May
(10) |
Jun
(201) |
Jul
(367) |
Aug
(341) |
Sep
(246) |
Oct
(304) |
Nov
(104) |
Dec
(103) |
2009 |
Jan
(80) |
Feb
(183) |
Mar
(165) |
Apr
(302) |
May
(255) |
Jun
(136) |
Jul
(189) |
Aug
(107) |
Sep
(179) |
Oct
(94) |
Nov
(47) |
Dec
(86) |
2010 |
Jan
(102) |
Feb
(142) |
Mar
(86) |
Apr
(182) |
May
(77) |
Jun
(56) |
Jul
(14) |
Aug
(182) |
Sep
(117) |
Oct
(87) |
Nov
(76) |
Dec
(76) |
2011 |
Jan
(27) |
Feb
(196) |
Mar
(69) |
Apr
(26) |
May
(9) |
Jun
(54) |
Jul
(60) |
Aug
(49) |
Sep
(11) |
Oct
(38) |
Nov
(49) |
Dec
(32) |
2012 |
Jan
(61) |
Feb
(166) |
Mar
(72) |
Apr
(66) |
May
(33) |
Jun
(138) |
Jul
(89) |
Aug
(354) |
Sep
(61) |
Oct
(69) |
Nov
(60) |
Dec
(45) |
2013 |
Jan
(14) |
Feb
(13) |
Mar
(29) |
Apr
(52) |
May
(63) |
Jun
(68) |
Jul
(32) |
Aug
(13) |
Sep
(34) |
Oct
(49) |
Nov
(86) |
Dec
(219) |
2014 |
Jan
(101) |
Feb
(72) |
Mar
(50) |
Apr
(32) |
May
(99) |
Jun
(141) |
Jul
(89) |
Aug
(14) |
Sep
(137) |
Oct
(221) |
Nov
(18) |
Dec
(10) |
2015 |
Jan
(50) |
Feb
(12) |
Mar
(33) |
Apr
(86) |
May
(72) |
Jun
(90) |
Jul
(33) |
Aug
(9) |
Sep
(9) |
Oct
(27) |
Nov
(25) |
Dec
(9) |
2016 |
Jan
(16) |
Feb
(27) |
Mar
(16) |
Apr
(12) |
May
(23) |
Jun
(80) |
Jul
(127) |
Aug
(39) |
Sep
(12) |
Oct
(32) |
Nov
(20) |
Dec
(29) |
2017 |
Jan
(46) |
Feb
(77) |
Mar
(19) |
Apr
(36) |
May
(99) |
Jun
(45) |
Jul
(75) |
Aug
(53) |
Sep
(26) |
Oct
(57) |
Nov
(22) |
Dec
(4) |
2018 |
Jan
(11) |
Feb
(48) |
Mar
(80) |
Apr
(159) |
May
(41) |
Jun
(10) |
Jul
(36) |
Aug
(84) |
Sep
(76) |
Oct
(38) |
Nov
(177) |
Dec
(319) |
2019 |
Jan
(213) |
Feb
(244) |
Mar
(95) |
Apr
(48) |
May
(19) |
Jun
(3) |
Jul
(2) |
Aug
(17) |
Sep
(16) |
Oct
(35) |
Nov
(68) |
Dec
(20) |
2020 |
Jan
(16) |
Feb
(91) |
Mar
(244) |
Apr
(139) |
May
(13) |
Jun
(42) |
Jul
(29) |
Aug
(60) |
Sep
(53) |
Oct
(19) |
Nov
(63) |
Dec
(3) |
2021 |
Jan
(51) |
Feb
(72) |
Mar
(87) |
Apr
(31) |
May
(19) |
Jun
(73) |
Jul
(93) |
Aug
(31) |
Sep
(24) |
Oct
(79) |
Nov
(60) |
Dec
(24) |
2022 |
Jan
(49) |
Feb
(33) |
Mar
(13) |
Apr
(29) |
May
(92) |
Jun
(66) |
Jul
(64) |
Aug
(54) |
Sep
(22) |
Oct
(2) |
Nov
(23) |
Dec
(252) |
2023 |
Jan
(100) |
Feb
(121) |
Mar
(13) |
Apr
(43) |
May
(46) |
Jun
(24) |
Jul
(19) |
Aug
(8) |
Sep
(17) |
Oct
(15) |
Nov
(25) |
Dec
(24) |
2024 |
Jan
(43) |
Feb
(14) |
Mar
(40) |
Apr
(59) |
May
(37) |
Jun
(36) |
Jul
(41) |
Aug
(20) |
Sep
(43) |
Oct
|
Nov
|
Dec
|
From: Mark M. <mie...@gm...> - 2009-09-18 19:37:28
|
On Fri, Sep 18, 2009 at 12:29 PM, Moritz Hoffmann <ant...@gm...> wrote: > I'm starting to look at the rexx code again. But when I wanted to build > an RPM on my oceb (RedHat), I got: > > > [moritz@antiguru]~/dev/oorexx% make rpm > make: *** No rule to make target `classesSupportHeaders', needed by > `distdir'. Stop. > > Am I missing something or is there anything wrong? I don't know what > causes this. Hi Moritz, You did the ./bootstrap and ./configure steps didn't you? I built trunk on a Debian system yesterday without problem, so I wouldn't think there would be a problem on Linux. I haven't built a rpm for a little bit, something may have slipped in. The release code definitely builds a rpm of course. -- Mark Miesfeld |
From: Moritz H. <ant...@gm...> - 2009-09-18 19:29:43
|
Hi, I'm starting to look at the rexx code again. But when I wanted to build an RPM on my oceb (RedHat), I got: [moritz@antiguru]~/dev/oorexx% make rpm make: *** No rule to make target `classesSupportHeaders', needed by `distdir'. Stop. Am I missing something or is there anything wrong? I don't know what causes this. Kind regards, Moritz |
From: Rainer T. <ta...@ta...> - 2009-09-16 15:16:02
|
Hello, yug k wrote: > Hi Rainer, > > Here is the output : > > [root]/> xlC_r -qversion > *C for AIX version 6.0.0.0[root]/>* as stated in the read me files this version is not working. You need at least XL C/C++ V8 to compile ooRexx. All programs linked with the ooRexx libraries should also be compile with the XL C/C++ V8, V9, V10.1 compiler. The old V6 will not work. Bye Rainer > [root]/> > > regards, > > Yug > > On Wed, Sep 16, 2009 at 1:08 PM, Rainer Tammer <ta...@ta... > <mailto:ta...@ta...>> wrote: > > Hello, > > > yug k wrote: >> Hi Rainer, >> >> Thanks for the updated source code . I've tried compiling and got >> the same error again .. >> >> I've followed the process given in "unix-like-build.txt" file >> >> 32 bit build >> >> Before running the configure script, set the following environment >> variables: >> >> % export CC=xlc_r >> % export CXX=xlC_r >> % export LDFLAGS="-Wl,-brtl -Wl,-bmaxdata:0x80000000" >> >> % ./configure --disable-static >> % make >> % make install >> % mkdir /var/run >> >> >> upon doing the *make* I got the error 255 again : > OK, > what is the exact compiler version ?? > > xlC_r -qversion > > Bye > Rainer > >> >> ./rexximage >> exec(): 0509-036 Cannot load program >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/lt-rexximage >> because of the following errors: >> rtld: 0712-001 Symbol DEBUG_TOGGLE__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol DEBUG_ON__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_SETTING_MASK__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol DEFAULT_TRACE_SETTING__10RexxSource was >> referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_NORMAL__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol DEBUG_NOTRACE__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_IGNORE__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol DEBUG_IGNORE__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol DEBUG_OFF__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_ALL__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_COMMANDS__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_LABELS__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_ERRORS__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_FAILURES__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_OFF__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_RESULTS__10RexxSource was referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> rtld: 0712-001 Symbol TRACE_INTERMEDIATES__10RexxSource was >> referenced >> from module >> /ffadata/softwares/oorexxrainersource/ooRexx-4.0.0/.libs/librexx.so(), >> but a runtime definition >> of the symbol was not found. >> make: *** [rexx.img] Error 255 >> >> >> >> I think it's unable to run "rexximage" . Can you please suggest >> what I try in order to fix this . >> >> regards, >> Yug >> >> On Wed, Sep 16, 2009 at 7:54 AM, Rainer Tammer <ta...@ta... >> <mailto:ta...@ta...>> wrote: >> >> Hello, >> it looks like sending a gz file is not possible to your eMail >> account. >> >> You can get the file here: >> >> http://www.tammer.net/ooRexx/ooRexx-4.0.0.tar.gz >> >> Bye >> Rainer >> >> -------------------------- >> Hello, >> >> this is the working tar ball for AIX. >> This version has two patches compared to the SourceForge release: >> >> * fixed the double ;; >> * added one memory allocation check in the rxapi client code >> >> This source is working on my machines and in the IBM AIX lab. >> >> Bye >> Rainer >> >> > > |
From: Rony G. F. <Ron...@wu...> - 2009-09-16 06:48:55
|
One more observation: changing the Java code for the Java threads to not use the same Rexx interpreter instance (RII) as the previously posted example, but rather create their own RII that then is used to run the submitted Rexx program (which then will spin off Rexx threads), then I get reliably exceptions (all Java threads got created at that point, but no Rexx script has generated any debug output yet), with a stack trace that goes into rexx. Unfortunately, because of the beginning winter semester, I have barely time to analyze this further, as my planner is now full with University meetings and preparation for classes and the like. So further information from my side may take a couple of days. [The *totally unsubstantiated* "gut feeling" - from weeks of looking at all sort of debug outputs - would be at the moment, that something goes wrong in the AttachThread() or DetachThread() in a heavily multithreaded run-set. Once I debug this new test case, which looks promising just because it reliably fails, I would know more. One test case I plan to create on the weekend is to write a small C++ program that creates 23 threads in which individual RIIs get created, which are then used from the threads to run an adapted Rexx proram, that spins off 27 Rexx threads. With a little "luck" that may exhibit the same behaviour, although the context switches between the Java and Rexx environments would not take place in this case.] Just posted this for the record, as it may be the case that someone has additional ideas about what I should be looking into while working on this this coming weekend. ---rony Rony G. Flatscher wrote: > Short of an example that would reliably produce an exception in the > heavy multithreading scenario, maybe this descritpion of what happens > in BSF4Rexx may be helpful: > > In the context of the testUnits a Rexx program will create an instance > of the Java class TestNestedEngines, supplying it the parameters (see > below) and RexxProxy objects to follow/interact with. Below is the > Java program, followed by the Rexx program that gets invoked. Finally, > a brief description of how the Rexx APIs get used. > > * the following Java program from the BSF4Rexx test unit gets > invoked from a Rexx script, supplying as arguments the current > BSFManager object which manages one Rexx interpreter instance > (RII), a RexxProxy that allows to interact with the testUnit > (allowing sending it assert messages), the nrJavaThreads and the > nrRexxThreads per Java thread, and a RexxProxy for an ooRexx > array, which will get the different thread's thread IDs added > (the items in this array will indicate how many threads got > invoked): > // rgf, 2009-09-10: test execution of Rexx scripts by concurrently creating Rexx scripts > > package rgf.F_multiThreading; > > import org.rexxla.bsf.engines.rexx.RexxProxy; > > import org.apache.bsf.*; // BSF support > import java.io.IOException; // exception handling > > import java.io.File; > import java.io.FileReader; > import java.util.Vector; > > /** Test Java program which demonstrates how easy it is to invoke Rexx via BSF. > * @author Rony G. Flatscher, 2001-04-27, 2007-09-10, 2009-09-11 > */ > public class TestNestedEngines { > static BSFManager bm=null; // BSFManager of the Rexx instance that invoked this Java program > static RexxProxy testUnit=null; // to allow assertions > static int nrJavaThreads=0; // determine number of Java threads > static int nrRexxThreads=0; // determine number of Rexx threads > static String rexxCode=null; // Rexx code to run > static RexxProxy rpArray=null; // RexxProxy to allow storing TID in Rexx array object > > > public TestNestedEngines(BSFManager bm, RexxProxy testUnit, int nrJavaThreads, int nrRexxThreads, String rexxCode, RexxProxy rpArray) > { > // save arguments in attributes > TestNestedEngines.bm =bm; > TestNestedEngines.testUnit =testUnit; > TestNestedEngines.nrJavaThreads =nrJavaThreads; > TestNestedEngines.nrRexxThreads =nrRexxThreads; > TestNestedEngines.rexxCode =rexxCode; > TestNestedEngines.rpArray =rpArray; > } > > > /** Creates number of desired threads, runs them. */ > public void dispatchRexxScripts() throws Exception > { > > String tmpResult=""; > Throwable tmpTh=null; > String tmpthreadName=null; > > // create arrays of needed size > Thread t[]=new Thread[nrJavaThreads]; > ThreadedJNIRexxStart r[]=new ThreadedJNIRexxStart[nrJavaThreads]; > > for (int i=0;i<nrJavaThreads; i++) > { > r[i]=new ThreadedJNIRexxStart(); > t[i]=new Thread(r[i]); // create thread > r[i].setThreadName(t[i].getName()); > t[i].start(); // start execution on own thread > } > // all got started > > for (int i=0;i<nrJavaThreads; i++) // join all threads > { > t[i].join(); > } > // all are finished > > } > > > // Runnable inner class > static private class ThreadedJNIRexxStart implements Runnable > { > // define thread local variables > private static ThreadLocal tlThrowable = new ThreadLocal(); > private static ThreadLocal tlResult = new ThreadLocal(); > private static ThreadLocal tlThreadName= new ThreadLocal(); > > > public void run () // invoke ooRexx on its own Java thread > { > try { > String threadName=Thread.currentThread().getName(); > > rpArray.invoke("APPEND", new Object [] {threadName} ); // save this thread name in supplied RexxProxy array > > // define arguments for Rexx script > Vector args = new Vector(4); > args.add(testUnit); > args.add(rpArray); > args.add(new Integer(nrRexxThreads)); > args.add(threadName); > > // load the Rexx engine for this BSFManager instance > BSFEngine rexx = bm.loadScriptingEngine("rexx"); > > // execute the Rexx script > Object result= rexx.apply ("rexx", 0, 0, > rexxCode.replaceAll("@threadName", (""+threadName)), > null, > args); > > tlResult.set(result); // save result > } > catch (Throwable th) { > tlThrowable.set(th); // save Throwable > System.err.println("TestNestedEngines: threadName=["+tlThreadName.get()+"], Throwable=["+th+"]"); > th.printStackTrace(); > } > } > > public Object getResult() { // getter > return tlResult.get(); > } > > public Throwable getThrowable() { // getter > return (Throwable) tlThrowable.get(); > } > > public String getThreadName() { // getter > return (String) tlThreadName.get(); > } > > public void setThreadName(String threadName) { // setter > tlThreadName.set(threadName); > } > } > } > > * this is the Rexx program, that the Java program executes: it > gets the proxied Rexx object for doing direct assertions, but > leaves the rpArray RexxProxy object and addresses it as a Java > object (the Java side will then forward whatever message and > arguments directly to the proxied Rexx object); an instance of > .counter is used to count the active Rexx threads (each thread > will decrease the counter before returning, such that the > counter drops to 0, if all threads ended; here and then one > thread may still be pending after three seconds); the main > ooRexx program, which runs in the same thread as the Java thread > that started it, supplies its TID to the message "work" which it > sends to each instance of .ThreadClz. The "work" method does a > reply, in the remaining code the supplied TID will be used to > attach the Rexx thread to Java using TID's global referenced > Java object, but attaching using Java's AttachCurrentThread, > creating (and caching) a valid JNIEnv which then is used to > interface with Java: > use arg rpTestUnit, rpArray, nrThreads, javaThreadName > > tid=bsfGetTID() -- get this TID > testUnit=BsfRexxProxy(rpTestUnit, "ooRexxObject") -- get ooRexx object that gets proxied > > -- save this thread's TID > argArray=bsf.createJavaArrayOf("java.lang.Object", tid) > rpArray~invoke("APPEND", argArray) > > rexxArray=.array~new -- create a new rexxArray for this controller's threads > > counter=.counter~new -- create a counter object > > do i=1 to nrThreads > counter~increase -- increase the counter > -- thread will decrease counter before returning > .ThreadClz_using_RexxProxy_Array~new~work(testUnit, tid, i, counter, rpArray, rexxArray, javaThreadName) > end > > call time "Reset" -- reset timer > loop while counter~value>0, time("elapsed")<3 -- until no more threads, or over 10seconds > call sysSleep .001 -- yield > end > > testUnit~assertEquals(0, counter~value, "active thread counter in Java thread:" javaThreadName) > > -- this controller created 'nrThreads' threads, check it > testUnit~assertEquals(nrThreads, rexxArray~items, "total number of threads:" javaThreadName) > > > ::requires BSF.CLS > > > /* ==================================================================================== */ > -- implement a counter that one can increase/decrease > ::class counter > ::method init -- constructor > expose value > value=0 -- set attribute > forward to (super) -- let superclass initialize > > ::attribute value -- allow interfacing with the attribute > > ::method increase -- increase value by 1 > expose value > value+=1 > return value > > ::method decrease -- decrease value by 1 > expose value > value-=1 > return value > > > > /* ==================================================================================== */ > -- implement a class with a threaded worker method > ::class "ThreadClz_using_RexxProxy_Array" > ::method work > use arg testUnit, TID, nr, counter, rpArray, rexxArray, javaThreadName > reply -- return & create a new thread > > thisTID=BsfGetTID() > testUnit~assertTrue(BsfAttachToTID(TID), "attaching to main TID:" TID", thread #" nr", thisTID="thisTID "running in Java thread named:" javaThreadName) > > -- have the RexxProxy send the following message to its proxied Rexx object > argArray=bsf.createJavaArrayOf("java.lang.Object", thisTID) > rpArray~invoke("APPEND", argArray) -- save thisTID > rexxArray~append(thisTID) > > testUnit~assertTrue(BsfDetach(), "detaching from main TID:" TID", thread #" nr", thisTID="thisTID "running in Java thread named:" javaThreadName) > counter~decrease > return > > > > The Java program above will use the passed BSFManager object to get a > reference to its RexxEngine instance which represents a unique Rexx > interpreter instance (RII). This RII is then used via JNI to dispatch > Rexx scripts or to send messages to Rexx objects. In the case where a > Rexx script gets dispatched the following happens: > > * for each created Java thread rexx.apply() will use JNI to run > the supplied Rexx program by > o defining: rtc->NewRoutine() > o running it: rtc->CallRoutine() > * the invoked Rexx program will interact with an ooRexx object > directly, with a RexxProxy() via Java, i.e. > o the RexxProxy Java method "invoke" is invoked supplying a > Java array with arguments, > o the Java side will excercise the JNI function that allows > sending a Rexx object a message: > + the native side will do an AttachThread() using the RII, > + the Rexx object is retrieved from the RexxProxy cache, > + the received Java aguments are unmarshalled, > + the ooRexx object gets the message sent (with the > arguments, if any), > + upon return a DetachThread() is executed, the return > value marshalled for Java > o the received return value will then returned to the Rexx > side where at the JNI-level it gets unmarshalled and returned. > > If there is anything else I could supply at the moment, please let me > know. > > ---rony |
From: Rainer T. <ta...@ta...> - 2009-09-16 06:30:45
|
Hello, one addition: Additionally we could double APIServer *server. This way if both server and server_backup points to the same object we could be reasonable sure that the server pointer is not corrupted. Bye Rainer |
From: Rainer T. <ta...@ta...> - 2009-09-16 06:06:26
|
Hello, (Rick please read the note at the end) yug k wrote: > Hi All, > > I've been trying to compile the source code of ooRexx 4.0.0 on AIX 5.3 OK what exact compiler version do you use? The code is very sensitive to the C compiler. The gcc compiler does not work. If you are using a IBM compiler then you need the versions documented in the unix-like-build.txt. Older versions do not work, they ether can not compile the code or do produce non working binaries. Please read also the notes about the build tools. It might be possible that the source tar ball from SouceForge do not wok on AIX because the build tools (for generating configure, ...) were to old. If you like I can provide you a working source tar ball for AIX. > and first got the error .. > > "; unexpected on line 394 of Token.hpp" > > I changed the line .. > > RexxToken(int, int, RexxString *, SourceLocation &)*;;* > > to .. > > RexxToken(int, int, RexxString *, SourceLocation &)*;* > > > Then I continued with *"make"* and got the following error . Basically > it's unable to run "lt-rexximage"due to these errors : > > cp ./interpreter/RexxClasses/*.orx . > cp ./interpreter/platform/unix/*.orx . > ./rexximage > exec(): 0509-036 Cannot load program > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/lt-rexximage because > of the following errors: > rtld: 0712-001 Symbol DEBUG_TOGGLE__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol DEBUG_ON__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_SETTING_MASK__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol DEFAULT_TRACE_SETTING__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_NORMAL__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol DEBUG_NOTRACE__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_IGNORE__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol DEBUG_IGNORE__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol DEBUG_OFF__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_ALL__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_COMMANDS__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_LABELS__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_ERRORS__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_FAILURES__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_OFF__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_RESULTS__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > rtld: 0712-001 Symbol TRACE_INTERMEDIATES__10RexxSource was referenced > from module > /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a > runtime definition > of the symbol was not found. > make: *** [rexx.img] Error 255 > > Can anyone please suggest me what I can do to fix the problem .. > The best think would be a simple example which triggers the problem. Neither my own programs nor the ooRexx test suite triggers this problem on my systems. Currently I am thinking of a simple way to find out if there is really a memory corruption. Rick and I think that the problem is here: /** * Dispatch the newly created reader thread to do it's work. */ void APIServerThread::dispatch() { // just dispatch this back to the api server for handling server->processMessages(connection); // ----------> memory coruption here ?? <------------------------- server->sessionTerminated(this); } If we add a signature in the APIServer object constructor like marker = "ooRexxOBJ" and then in the destructor set marker = "destroyed" we could check if either: 1. The object is _probably_ valid 2. The object is already destroyed 3. The pointer points to an invalid memory region > The version of my xlC is ..* > xlC.rte 10.1.0.0 COMMITTED XL C/C++ Runtime* > > > regards, > > Yugandhar Bye Rainer |
From: yug k <yk....@gm...> - 2009-09-15 21:34:51
|
Hi All, I've been trying to compile the source code of ooRexx 4.0.0 on AIX 5.3 and first got the error .. "; unexpected on line 394 of Token.hpp" I changed the line .. RexxToken(int, int, RexxString *, SourceLocation &)*;;* to .. RexxToken(int, int, RexxString *, SourceLocation &)*;* Then I continued with *"make"* and got the following error . Basically it's unable to run "lt-rexximage"due to these errors : cp ./interpreter/RexxClasses/*.orx . cp ./interpreter/platform/unix/*.orx . ./rexximage exec(): 0509-036 Cannot load program /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/lt-rexximage because of the following errors: rtld: 0712-001 Symbol DEBUG_TOGGLE__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol DEBUG_ON__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_SETTING_MASK__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol DEFAULT_TRACE_SETTING__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_NORMAL__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol DEBUG_NOTRACE__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_IGNORE__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol DEBUG_IGNORE__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol DEBUG_OFF__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_ALL__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_COMMANDS__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_LABELS__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_ERRORS__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_FAILURES__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_OFF__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_RESULTS__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol TRACE_INTERMEDIATES__10RexxSource was referenced from module /ffadata/softwares/oorexxsource/4.0.0/trunk/.libs/librexx.so(), but a runtime definition of the symbol was not found. make: *** [rexx.img] Error 255 Can anyone please suggest me what I can do to fix the problem .. The version of my xlC is ..* xlC.rte 10.1.0.0 COMMITTED XL C/C++ Runtime* regards, Yugandhar |
From: Mark M. <mie...@gm...> - 2009-09-15 16:44:45
|
On Tue, Sep 15, 2009 at 8:36 AM, David Ashley <dav...@gm...> wrote: > I think I have the email notification fixed for the WinXP builds. Try it > an let me know. David, it did work, I got the e-mail. -- Mark Miesfeld |
From: David A. <dav...@gm...> - 2009-09-15 15:36:25
|
I think I have the email notification fixed for the WinXP builds. Try it an let me know. David Ashley On 09/15/2009 10:06 AM, Mark Miesfeld wrote: > On Wed, Sep 2, 2009 at 12:19 PM, David Ashley > <dav...@gm...> wrote: > > Hi David, > > The build machine is working well for me, thanks. > > >> Oh yes, the VMs are all up but I think there is a problem with the WinXP >> mail interface. Let me know if you do not receive an email notification >> when requesting a WinXP build. >> > I don't get the e-mail notice when requesting the WinXP build. That's > not a big deal to me, I know when I requested a build, I know about > when it should be done.<grin> Just thought I'd let you know. > > -- > Mark Miesfeld > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > _______________________________________________ > Oorexx-devel mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > > |
From: Mark M. <mie...@gm...> - 2009-09-15 15:07:14
|
On Wed, Sep 2, 2009 at 12:19 PM, David Ashley <dav...@gm...> wrote: Hi David, The build machine is working well for me, thanks. > Oh yes, the VMs are all up but I think there is a problem with the WinXP > mail interface. Let me know if you do not receive an email notification > when requesting a WinXP build. I don't get the e-mail notice when requesting the WinXP build. That's not a big deal to me, I know when I requested a build, I know about when it should be done. <grin> Just thought I'd let you know. -- Mark Miesfeld |
From: Sahananda (J. W. <sah...@wi...> - 2009-09-14 17:20:51
|
Mark, this sounds good to me too. I think Ideally the ooDialog user should just be able to requires one class and everything should be there for them. You might want to make them choose one class for use with a resource file and another for use with the dynamic methods, but I don't even know if that is necesary from an ooDialog user's standpoint. The distinction between the old controls and the 'new' 32 bit controls was history before I ever met ooDialog. Jon 2009/9/14 Rick McGuire <obj...@gm...> > This sounds good to me. In general, if a method does not make sense > for a give class, then the appropriate error message should be "does > not understand". In other words, the class should not have the method > in the first place. If I understand your refactoring correctly, that > would be the net result, which would be a good thing. > > Rick > > On Mon, Sep 14, 2009 at 12:58 PM, Mark Miesfeld <mie...@gm...> > wrote: > > I'm looking for a little help, advice, or maybe even a flat out "you > > can't do that" concerning the possibility of refactoring some of the > > ooDialog classes. > > > > Specifically, I would like to move some methods out of the > > AdvancedControls mixin class back to the DynamicDialog class. > > > > The DynamicDialog class has the methods that allow a dialog template > > to be built in memory, by the Rexx programmer. It has methods like > > addButton(), addListBox() that add dialog controls to the template. > > > > The AdvancedDialog class has methods that allow the use of, what was > > probably at the time "newer" controls, like the Tree-view control. Of > > course today these "newer" controls are far from new. But the class > > also has several methods, like addTreeControl() that really should > > have been in the DynamicDialog classe. Because: > > > > The DynamicDialog class has all the implementation code for managing > > the in memory template, which is needed by addTreeControl(). The > > functionality of adding a dialog control to the in memory template is > > the functionality of the DynamicDialog class. All dialog classes that > > have the ability to use this functionality have inherited the > > DynamicDialog class already in the ooDialog framework. > > > > On the other hand, the AdvancedControls class is not inherited by any > > class in the framework, it is up to the user to inherit if from the > > user's subclass. Which means the user can inherit the class in > > dialogs that do not support the building of the in memory template. > > In these cases, if the addXXXControl() methods are invoked they fail > > with raised exceptions, because the methods have to invoke > > DynamicDialog methods which are not available. The AdvancedControls > > class *is* inherited by dialog subclasses that do not support the > > building of the in memory template, because the functionality it > > provides, that of working with "new" controls, is useful to all > > dialogs, whether they are "user defined" dialogs or not. > > > > If I moved these methods out of the AdvancedControls class into the > > DynamicDialog class, where I think they belong, in all programs where > > the methods currently work, they would still work. In all programs > > where the methods currently don't work, they would still not work. > > > > Any thoughts on this? > > > > -- > > Mark Miesfeld > > > > > ------------------------------------------------------------------------------ > > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > > trial. Simplify your report design, integration and deployment - and > focus on > > what you do best, core application coding. Discover what's new with > > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > _______________________________________________ > > Oorexx-devel mailing list > > Oor...@li... > > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > > > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Oorexx-devel mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > |
From: Rick M. <obj...@gm...> - 2009-09-14 17:05:27
|
This sounds good to me. In general, if a method does not make sense for a give class, then the appropriate error message should be "does not understand". In other words, the class should not have the method in the first place. If I understand your refactoring correctly, that would be the net result, which would be a good thing. Rick On Mon, Sep 14, 2009 at 12:58 PM, Mark Miesfeld <mie...@gm...> wrote: > I'm looking for a little help, advice, or maybe even a flat out "you > can't do that" concerning the possibility of refactoring some of the > ooDialog classes. > > Specifically, I would like to move some methods out of the > AdvancedControls mixin class back to the DynamicDialog class. > > The DynamicDialog class has the methods that allow a dialog template > to be built in memory, by the Rexx programmer. It has methods like > addButton(), addListBox() that add dialog controls to the template. > > The AdvancedDialog class has methods that allow the use of, what was > probably at the time "newer" controls, like the Tree-view control. Of > course today these "newer" controls are far from new. But the class > also has several methods, like addTreeControl() that really should > have been in the DynamicDialog classe. Because: > > The DynamicDialog class has all the implementation code for managing > the in memory template, which is needed by addTreeControl(). The > functionality of adding a dialog control to the in memory template is > the functionality of the DynamicDialog class. All dialog classes that > have the ability to use this functionality have inherited the > DynamicDialog class already in the ooDialog framework. > > On the other hand, the AdvancedControls class is not inherited by any > class in the framework, it is up to the user to inherit if from the > user's subclass. Which means the user can inherit the class in > dialogs that do not support the building of the in memory template. > In these cases, if the addXXXControl() methods are invoked they fail > with raised exceptions, because the methods have to invoke > DynamicDialog methods which are not available. The AdvancedControls > class *is* inherited by dialog subclasses that do not support the > building of the in memory template, because the functionality it > provides, that of working with "new" controls, is useful to all > dialogs, whether they are "user defined" dialogs or not. > > If I moved these methods out of the AdvancedControls class into the > DynamicDialog class, where I think they belong, in all programs where > the methods currently work, they would still work. In all programs > where the methods currently don't work, they would still not work. > > Any thoughts on this? > > -- > Mark Miesfeld > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Oorexx-devel mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > |
From: Mark M. <mie...@gm...> - 2009-09-14 16:58:14
|
I'm looking for a little help, advice, or maybe even a flat out "you can't do that" concerning the possibility of refactoring some of the ooDialog classes. Specifically, I would like to move some methods out of the AdvancedControls mixin class back to the DynamicDialog class. The DynamicDialog class has the methods that allow a dialog template to be built in memory, by the Rexx programmer. It has methods like addButton(), addListBox() that add dialog controls to the template. The AdvancedDialog class has methods that allow the use of, what was probably at the time "newer" controls, like the Tree-view control. Of course today these "newer" controls are far from new. But the class also has several methods, like addTreeControl() that really should have been in the DynamicDialog classe. Because: The DynamicDialog class has all the implementation code for managing the in memory template, which is needed by addTreeControl(). The functionality of adding a dialog control to the in memory template is the functionality of the DynamicDialog class. All dialog classes that have the ability to use this functionality have inherited the DynamicDialog class already in the ooDialog framework. On the other hand, the AdvancedControls class is not inherited by any class in the framework, it is up to the user to inherit if from the user's subclass. Which means the user can inherit the class in dialogs that do not support the building of the in memory template. In these cases, if the addXXXControl() methods are invoked they fail with raised exceptions, because the methods have to invoke DynamicDialog methods which are not available. The AdvancedControls class *is* inherited by dialog subclasses that do not support the building of the in memory template, because the functionality it provides, that of working with "new" controls, is useful to all dialogs, whether they are "user defined" dialogs or not. If I moved these methods out of the AdvancedControls class into the DynamicDialog class, where I think they belong, in all programs where the methods currently work, they would still work. In all programs where the methods currently don't work, they would still not work. Any thoughts on this? -- Mark Miesfeld |
From: Rony G. F. <Ron...@wu...> - 2009-09-14 15:42:50
|
Short of an example that would reliably produce an exception in the heavy multithreading scenario, maybe this descritpion of what happens in BSF4Rexx may be helpful: In the context of the testUnits a Rexx program will create an instance of the Java class TestNestedEngines, supplying it the parameters (see below) and RexxProxy objects to follow/interact with. Below is the Java program, followed by the Rexx program that gets invoked. Finally, a brief description of how the Rexx APIs get used. * the following Java program from the BSF4Rexx test unit gets invoked from a Rexx script, supplying as arguments the current BSFManager object which manages one Rexx interpreter instance (RII), a RexxProxy that allows to interact with the testUnit (allowing sending it assert messages), the nrJavaThreads and the nrRexxThreads per Java thread, and a RexxProxy for an ooRexx array, which will get the different thread's thread IDs added (the items in this array will indicate how many threads got invoked): // rgf, 2009-09-10: test execution of Rexx scripts by concurrently creating Rexx scripts package rgf.F_multiThreading; import org.rexxla.bsf.engines.rexx.RexxProxy; import org.apache.bsf.*; // BSF support import java.io.IOException; // exception handling import java.io.File; import java.io.FileReader; import java.util.Vector; /** Test Java program which demonstrates how easy it is to invoke Rexx via BSF. * @author Rony G. Flatscher, 2001-04-27, 2007-09-10, 2009-09-11 */ public class TestNestedEngines { static BSFManager bm=null; // BSFManager of the Rexx instance that invoked this Java program static RexxProxy testUnit=null; // to allow assertions static int nrJavaThreads=0; // determine number of Java threads static int nrRexxThreads=0; // determine number of Rexx threads static String rexxCode=null; // Rexx code to run static RexxProxy rpArray=null; // RexxProxy to allow storing TID in Rexx array object public TestNestedEngines(BSFManager bm, RexxProxy testUnit, int nrJavaThreads, int nrRexxThreads, String rexxCode, RexxProxy rpArray) { // save arguments in attributes TestNestedEngines.bm =bm; TestNestedEngines.testUnit =testUnit; TestNestedEngines.nrJavaThreads =nrJavaThreads; TestNestedEngines.nrRexxThreads =nrRexxThreads; TestNestedEngines.rexxCode =rexxCode; TestNestedEngines.rpArray =rpArray; } /** Creates number of desired threads, runs them. */ public void dispatchRexxScripts() throws Exception { String tmpResult=""; Throwable tmpTh=null; String tmpthreadName=null; // create arrays of needed size Thread t[]=new Thread[nrJavaThreads]; ThreadedJNIRexxStart r[]=new ThreadedJNIRexxStart[nrJavaThreads]; for (int i=0;i<nrJavaThreads; i++) { r[i]=new ThreadedJNIRexxStart(); t[i]=new Thread(r[i]); // create thread r[i].setThreadName(t[i].getName()); t[i].start(); // start execution on own thread } // all got started for (int i=0;i<nrJavaThreads; i++) // join all threads { t[i].join(); } // all are finished } // Runnable inner class static private class ThreadedJNIRexxStart implements Runnable { // define thread local variables private static ThreadLocal tlThrowable = new ThreadLocal(); private static ThreadLocal tlResult = new ThreadLocal(); private static ThreadLocal tlThreadName= new ThreadLocal(); public void run () // invoke ooRexx on its own Java thread { try { String threadName=Thread.currentThread().getName(); rpArray.invoke("APPEND", new Object [] {threadName} ); // save this thread name in supplied RexxProxy array // define arguments for Rexx script Vector args = new Vector(4); args.add(testUnit); args.add(rpArray); args.add(new Integer(nrRexxThreads)); args.add(threadName); // load the Rexx engine for this BSFManager instance BSFEngine rexx = bm.loadScriptingEngine("rexx"); // execute the Rexx script Object result= rexx.apply ("rexx", 0, 0, rexxCode.replaceAll("@threadName", (""+threadName)), null, args); tlResult.set(result); // save result } catch (Throwable th) { tlThrowable.set(th); // save Throwable System.err.println("TestNestedEngines: threadName=["+tlThreadName.get()+"], Throwable=["+th+"]"); th.printStackTrace(); } } public Object getResult() { // getter return tlResult.get(); } public Throwable getThrowable() { // getter return (Throwable) tlThrowable.get(); } public String getThreadName() { // getter return (String) tlThreadName.get(); } public void setThreadName(String threadName) { // setter tlThreadName.set(threadName); } } } * this is the Rexx program, that the Java program executes: it gets the proxied Rexx object for doing direct assertions, but leaves the rpArray RexxProxy object and addresses it as a Java object (the Java side will then forward whatever message and arguments directly to the proxied Rexx object); an instance of .counter is used to count the active Rexx threads (each thread will decrease the counter before returning, such that the counter drops to 0, if all threads ended; here and then one thread may still be pending after three seconds); the main ooRexx program, which runs in the same thread as the Java thread that started it, supplies its TID to the message "work" which it sends to each instance of .ThreadClz. The "work" method does a reply, in the remaining code the supplied TID will be used to attach the Rexx thread to Java using TID's global referenced Java object, but attaching using Java's AttachCurrentThread, creating (and caching) a valid JNIEnv which then is used to interface with Java: use arg rpTestUnit, rpArray, nrThreads, javaThreadName tid=bsfGetTID() -- get this TID testUnit=BsfRexxProxy(rpTestUnit, "ooRexxObject") -- get ooRexx object that gets proxied -- save this thread's TID argArray=bsf.createJavaArrayOf("java.lang.Object", tid) rpArray~invoke("APPEND", argArray) rexxArray=.array~new -- create a new rexxArray for this controller's threads counter=.counter~new -- create a counter object do i=1 to nrThreads counter~increase -- increase the counter -- thread will decrease counter before returning .ThreadClz_using_RexxProxy_Array~new~work(testUnit, tid, i, counter, rpArray, rexxArray, javaThreadName) end call time "Reset" -- reset timer loop while counter~value>0, time("elapsed")<3 -- until no more threads, or over 10seconds call sysSleep .001 -- yield end testUnit~assertEquals(0, counter~value, "active thread counter in Java thread:" javaThreadName) -- this controller created 'nrThreads' threads, check it testUnit~assertEquals(nrThreads, rexxArray~items, "total number of threads:" javaThreadName) ::requires BSF.CLS /* ==================================================================================== */ -- implement a counter that one can increase/decrease ::class counter ::method init -- constructor expose value value=0 -- set attribute forward to (super) -- let superclass initialize ::attribute value -- allow interfacing with the attribute ::method increase -- increase value by 1 expose value value+=1 return value ::method decrease -- decrease value by 1 expose value value-=1 return value /* ==================================================================================== */ -- implement a class with a threaded worker method ::class "ThreadClz_using_RexxProxy_Array" ::method work use arg testUnit, TID, nr, counter, rpArray, rexxArray, javaThreadName reply -- return & create a new thread thisTID=BsfGetTID() testUnit~assertTrue(BsfAttachToTID(TID), "attaching to main TID:" TID", thread #" nr", thisTID="thisTID "running in Java thread named:" javaThreadName) -- have the RexxProxy send the following message to its proxied Rexx object argArray=bsf.createJavaArrayOf("java.lang.Object", thisTID) rpArray~invoke("APPEND", argArray) -- save thisTID rexxArray~append(thisTID) testUnit~assertTrue(BsfDetach(), "detaching from main TID:" TID", thread #" nr", thisTID="thisTID "running in Java thread named:" javaThreadName) counter~decrease return The Java program above will use the passed BSFManager object to get a reference to its RexxEngine instance which represents a unique Rexx interpreter instance (RII). This RII is then used via JNI to dispatch Rexx scripts or to send messages to Rexx objects. In the case where a Rexx script gets dispatched the following happens: * for each created Java thread rexx.apply() will use JNI to run the supplied Rexx program by o defining: rtc->NewRoutine() o running it: rtc->CallRoutine() * the invoked Rexx program will interact with an ooRexx object directly, with a RexxProxy() via Java, i.e. o the RexxProxy Java method "invoke" is invoked supplying a Java array with arguments, o the Java side will excercise the JNI function that allows sending a Rexx object a message: + the native side will do an AttachThread() using the RII, + the Rexx object is retrieved from the RexxProxy cache, + the received Java aguments are unmarshalled, + the ooRexx object gets the message sent (with the arguments, if any), + upon return a DetachThread() is executed, the return value marshalled for Java o the received return value will then returned to the Rexx side where at the JNI-level it gets unmarshalled and returned. If there is anything else I could supply at the moment, please let me know. ---rony |
From: Rony G. F. <Ron...@wu...> - 2009-09-14 07:31:25
|
Hi there, Gray Wilson has come up with a set of new ooRexx logos on the oorexx-users list, which he offers for free use to the Rexx community (cf. enclosed e-mails)! Enclosed please find his announcement e-mail and a link to an impressive set of renderings of mime-type icons following the target platform designs. He certainly has invested a lot of time and seems to be a very talented person in that way too! [Personally, I will take advantage of the BSF4Rexx and OpenOffice.org-Rexx logos for the upcoming version of BSF4Rexx 4.0.] Whether the community and/or RexxLA would take on these new logos in lieu of the existing ones will probably need some discussions in the respective groups. As Gray continues to add new platforms for the ooRexx logos, you may want to check out the website he points to in his e-mail. Also, if you want to give him feedback, you may want to use the user mailing list on Sourceforge: <http://sourceforge.net/mailarchive/forum.php?forum_name=oorexx-users>. ---rony -------- Original Message -------- Subject: Re: ooRexx Logo Date: Mon, 14 Sep 2009 03:19:04 +0100 From: Gray Wilson <gdw...@pu...> Reply-To: Open Object Rexx Users <oor...@pu...> To: Open Object Rexx Users <oor...@pu...> Newsgroups: gmane.comp.lang.rexx.oorexx.user Thanks, Rony and Peter for your encouragement. I've updated the set with another XP style filetype icon, giving a total of 72 pngs. http://graywz.deviantart.com/art/Open-Object-Rexx-Icons-136889466 I will work on an OSX style icon and upload it later this week. Thanks again Gray -------- Original Message -------- Subject: Re: ooRexx Logo Date: Sun, 13 Sep 2009 16:59:33 +0100 From: Gray Wilson <gdw...@pu...> Reply-To: Open Object Rexx Users <oor...@pu...> To: Open Object Rexx Users <oor...@pu...> Newsgroups: gmane.comp.lang.rexx.oorexx.user Hi Rony (and everyone) I've uploaded a complete ooRexx application-and-filetype set of icons for Linux and Windows. http://graywz.deviantart.com/art/Open-Object-Rexx-Icons-136889466 I took the liberty of using a code stub (written by you in "Resurrecting REXX, Introducing Object Rexx") in some of the icons. I hope you don't mind. The images are in ICO and PNG formats, and I've included the full Photoshop PSD source files for freedom and flexibility. But please let me know if you'd like me to change or add anything. Best wishes Gray Wilson |
From: Rick M. <obj...@gm...> - 2009-09-13 22:25:30
|
Oops, thanks. It's in now. Rick On Sun, Sep 13, 2009 at 6:16 PM, Mark Miesfeld <mie...@gm...> wrote: > Rick, > > I think you forgot a svn add: > > Cannot open include file: 'GlobalProtectedObject.hpp': No such file or directory > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Oorexx-devel mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > |
From: Mark M. <mie...@gm...> - 2009-09-13 22:16:39
|
Rick, I think you forgot a svn add: Cannot open include file: 'GlobalProtectedObject.hpp': No such file or directory |
From: Rony G. F. <Ron...@wu...> - 2009-09-13 18:29:28
|
Rick McGuire wrote: > Well, the first thing you should do is use the release build, not the > trunk build. That version would be considered under construction at > this point, since the exception stack handling is being redone. > O.K., created it, and ran it a couple of times until an exception occurred (see below). After that I kept running it and the third time later another exception occurred (see second report) in a different place. Then running the test suite 10, 15 times did not yield any exception. --- All those exceptions only occur with the Rexx test unit test that will spin off 23 Java threads dispatching another Rexx script that spins off 29 Rexx threads. In all those threads there is interaction going on with Rexx objects directly or via BSF4Rexx in form of Java RexxProxy objects that dispatch messages on the Rexx side. {The multithreaded test unit where only Rexx threads are created which each attach to Java and interact with it, run alwayssuccessfully.) --- Here exception # 1 (after running the tests a couple of times without a problem): * stack trace > rexx.dll!SysSemaphore::post() Line 100 + 0xa bytes C++ rexx.dll!RexxActivity::guardPost() Line 1743 C++ rexx.dll!RexxVariable::notify() Line 138 C++ rexx.dll!RexxVariable::set(RexxObject * value=0x7fd4af50) Line 68 + 0x8 bytes C++ rexx.dll!RexxActivation::setLocalVariable(RexxString * name=0x7fcb06d8, unsigned int index=3, RexxObject * value=0x7fd4af50) Line 515 C++ rexx.dll!RexxInstructionMessage::execute(RexxActivation * context=0x7f66a818, RexxExpressionStack * stack=0x7f66a8d8) Line 246 C++ rexx.dll!RexxActivation::run(RexxObject * _receiver=0x7d7b8110, RexxString * msgname=0x7f0932f0, RexxObject * * _arglist=0x7e2eccac, unsigned int _argcount=7, RexxInstruction * start=0x00000000, ProtectedObject & resultObj={...}) Line 516 C++ rexx.dll!RexxActivation::dispatch() Line 375 + 0x33 bytes C++ rexx.dll!RexxActivity::runThread() Line 123 C++ rexx.dll!call_thread_function(void * arguments=0x7f204260) Line 63 C++ kernel32.dll!7c80b729() [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] rexx.dll!SysMutex::release() Line 134 C++ * Here's the end of the Output window: The thread 'Win32 Thread' (0x1784) has exited with code 0 (0x0). Unhandled exception at 0x0031d68a (rexx.dll) in rexx.exe: 0xC0000005: Access violation reading location 0x64f445e9. * The break occured in SysSemaphore.hpp in the public method: void post() { SetEvent(sem); }; -------- Here exception # 2 (after running immediately two sets successfuly): * call stack trace > rexx.dll!RexxList::getFree() Line 148 + 0x14 bytes C++ rexx.dll!RexxList::insert(RexxObject * _value=0x7d84ad98, RexxObject * _index=0x00000000) Line 556 + 0x8 bytes C++ rexx.dll!RexxList::append(RexxObject * _value=0x7d84ad98) Line 542 C++ rexx.dll!RexxNativeActivation::createLocalReference(RexxObject * objr=0x7d84ad98) Line 1148 C++ rexx.dll!ApiContext::ret(RexxObject * o=0x7d84ad98) Line 171 C++ rexx.dll!ObjectToString(RexxThreadContext_ * c=0x7d7d2c04, _RexxObjectPtr * o=0x7d84ad98) Line 958 + 0x17 bytes C++ BSF4Rexx.dll!RexxThreadContext_::ObjectToString(_RexxObjectPtr * o=0x7d84ad98) Line 1022 C++ BSF4Rexx.dll!RexxCallContext_::ObjectToString(_RexxObjectPtr * o=0x7d84ad98) Line 2366 C++ BSF4Rexx.dll!BSF_impl(RexxCallContext_ * context=0x03c5f9d4, _RexxArrayObject * argArray=0x7d84afb0) Line 5319 + 0x12 bytes C++ BSF4Rexx.dll!BSF(RexxCallContext_ * context=0x03c5f9d4, ValueDescriptor * arguments=0x03c5f9f0) Line 5146 + 0x17 bytes C++ rexx.dll!RexxNativeActivation::callNativeRoutine(RoutineClass * _routine=0x7f2242f0, RexxNativeRoutine * _code=0x7f2242d0, RexxString * functionName=0x7d84ace8, RexxObject * * list=0x7e356954, unsigned int count=5, ProtectedObject & resultObj={...}) Line 1312 C++ rexx.dll!RexxNativeRoutine::call(RexxActivity * activity=0x7d7d2bf0, RoutineClass * routine=0x7f2242f0, RexxString * functionName=0x7d84ace8, RexxObject * * argPtr=0x7e356954, unsigned int count=5, ProtectedObject & result={...}) Line 316 C++ rexx.dll!RoutineClass::call(RexxActivity * activity=0x7d7d2bf0, RexxString * msgname=0x7d84ace8, RexxObject * * argPtr=0x7e356954, unsigned int argcount=5, ProtectedObject & result={...}) Line 234 C++ rexx.dll!PackageManager::callNativeRoutine(RexxActivity * activity=0x7d7d2bf0, RexxString * name=0x7d84ace8, RexxObject * * arguments=0x7e356954, unsigned int argcount=5, ProtectedObject & result={...}) Line 658 C++ rexx.dll!SystemInterpreter::invokeExternalFunction(RexxActivation * activation=0x7de55918, RexxActivity * activity=0x7d7d2bf0, RexxString * target=0x7d84ace8, RexxObject * * arguments=0x7e356954, unsigned int argcount=5, RexxString * calltype=0x7fd52378, ProtectedObject & result={...}) Line 270 + 0x17 bytes C++ rexx.dll!RexxActivation::externalCall(RexxString * target=0x7d84ace8, unsigned int _argcount=5, RexxExpressionStack * _stack=0x7de559d8, RexxString * calltype=0x7fd52378, ProtectedObject & resultObj={...}) Line 2600 + 0x25 bytes C++ rexx.dll!RexxExpressionFunction::evaluate(RexxActivation * context=0x7de55918, RexxExpressionStack * stack=0x7de559d8) Line 225 C++ rexx.dll!RexxInstructionAssignment::execute(RexxActivation * context=0x7de55918, RexxExpressionStack * stack=0x7de559d8) Line 122 + 0x1d bytes C++ rexx.dll!RexxActivation::run(RexxObject * _receiver=0x00000000, RexxString * msgname=0x00000000, RexxObject * * _arglist=0x03c5fe08, unsigned int _argcount=2, RexxInstruction * start=0x00000000, ProtectedObject & resultObj={...}) Line 516 C++ rexx.dll!RexxActivation::interpret(RexxString * codestring=0x7d8496e8) Line 2354 C++ rexx.dll!RexxInstructionInterpret::execute(RexxActivation * context=0x7de34670, RexxExpressionStack * stack=0x7de34730) Line 80 C++ rexx.dll!RexxActivation::run(RexxObject * _receiver=0x7d836ec8, RexxString * msgname=0x7fce6468, RexxObject * * _arglist=0x03c5fe08, unsigned int _argcount=2, RexxInstruction * start=0x00000000, ProtectedObject & resultObj={...}) Line 516 C++ rexx.dll!RexxCode::run(RexxActivity * activity=0x7d7d2bf0, RexxMethod * method=0x7f1c3648, RexxObject * receiver=0x7d836ec8, RexxString * msgname=0x7fce6468, RexxObject * * argPtr=0x03c5fe08, unsigned int argcount=2, ProtectedObject & result={...}) Line 136 C++ rexx.dll!RexxMethod::run(RexxActivity * activity=0x7d7d2bf0, RexxObject * receiver=0x7d836ec8, RexxString * msgname=0x7fce6468, RexxObject * * argPtr=0x03c5fe08, unsigned int count=2, ProtectedObject & result={...}) Line 327 C++ rexx.dll!RexxObject::processUnknown(RexxString * messageName=0x7f41e720, RexxObject * * arguments=0x7e356834, unsigned int count=2, ProtectedObject & result={...}) Line 895 C++ rexx.dll!RexxObject::messageSend(RexxString * msgname=0x7f41e720, RexxObject * * arguments=0x7e356834, unsigned int count=2, ProtectedObject & result={...}) Line 798 C++ rexx.dll!RexxExpressionStack::send(RexxString * message=0x7f41e720, unsigned int count=2, ProtectedObject & result={...}) Line 74 + 0x33 bytes C++ rexx.dll!RexxInstructionMessage::execute(RexxActivation * context=0x7f3f0e60, RexxExpressionStack * stack=0x7f3f0f20) Line 229 C++ rexx.dll!RexxActivation::run(RexxObject * _receiver=0x7d833af0, RexxString * msgname=0x7f67bc08, RexxObject * * _arglist=0x7e3568a0, unsigned int _argcount=5, RexxInstruction * start=0x00000000, ProtectedObject & resultObj={...}) Line 516 C++ rexx.dll!RexxActivation::dispatch() Line 375 + 0x33 bytes C++ rexx.dll!RexxActivity::runThread() Line 123 C++ rexx.dll!call_thread_function(void * arguments=0x7d7d2bf0) Line 63 C++ kernel32.dll!7c80b729() [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] * Here's the end of the Output window: Unhandled exception at 0x002ef8e3 (rexx.dll) in rexx.exe: 0xC0000005: Access violation reading location 0x02c81b82. * The break occurred int ListClass.cpp in the getFree() method right before the return statement: this->free = ENTRY_POINTER(new_index)->next; ---rony |
From: Rick M. <obj...@gm...> - 2009-09-13 17:23:59
|
Well, the first thing you should do is use the release build, not the trunk build. That version would be considered under construction at this point, since the exception stack handling is being redone. Rick On Sun, Sep 13, 2009 at 12:14 PM, Rony G. Flatscher <Ron...@wu...> wrote: > Hi there, > > For this one: > > Scenario 1: 32-bit Windows (not tested on 64-bit Windows), exception > in "rexx.exe": > > Here I may get the following exception > > > rexx.dll!00337328() > > > [Frames below may be incorrect and/or missing, no symbols loaded for > rexx.dll] > rexx.dll!002ff218() > rexx.dll!002e9490() > rexx.dll!00303462() > rexx.dll!003473c9() > kernel32.dll!7c80b729() > > You're not going to get anywhere with this, you need to use a debug version > of the interpreter and BSF so you can see what functions these are. > > If, you have a scenario that produces the exception 100% of the time with > a non-debug build, and then never produces the exception with a debug > version - well that's going to be hard. It also is very rare. But, > if it is the case, > you'll need to at least track the addresses down in the map file and use the > *.asm files to see exactly where this sequence is. > > > O.K. done that, created and installed "ooRexx400_5165-x86_32-debug.exe". > > Running the tests eventually (the 7th time running the BSF4Rexx suite) will > cause the following stack trace: > >> rexx.dll!SourceLocation::getLineNumber() Line 51 + 0xa bytes C++ > rexx.dll!RexxInstruction::getLineNumber() Line 79 + 0x12 bytes C++ > rexx.dll!RexxActivation::getContextLineNumber() Line 2511 C++ > rexx.dll!RexxActivation::createStackFrame() Line 4272 + 0x22 bytes C++ > rexx.dll!RexxActivationFrame::createStackFrame() Line 58 C++ > rexx.dll!RexxActivity::createExceptionObject(long errcode=40900, > RexxString * description=0x00000000, RexxArray * additional=0x7d3eeb50, > RexxObject * result=0x00000000) Line 906 + 0xd bytes C++ > rexx.dll!RexxActivity::raiseException(long errcode=40900, RexxString * > description=0x00000000, RexxArray * additional=0x7d3eeb50, RexxObject * > result=0x00000000) Line 753 + 0x18 bytes C++ > rexx.dll!RexxActivity::reportAnException(long errcode=40900, RexxObject * > substitution1=0x7dc112c8) Line 505 C++ > rexx.dll!reportException(long error=40900, RexxObject * a1=0x7dc112c8) > Line 159 C++ > rexx.dll!RaiseException1(RexxThreadContext_ * c=0x7f3e5ca4, unsigned int > n=40900, _RexxObjectPtr * o1=0x7dc112c8) Line 1715 C++ > BSF4Rexx.dll!RexxThreadContext_::RaiseException1(unsigned int n=40900, > _RexxObjectPtr * o=0x7dc112c8) Line 1284 C++ > BSF4Rexx.dll!RexxCallContext_::RaiseException1(unsigned int n=40900, > _RexxObjectPtr * o=0x7dc112c8) Line 2629 C++ > BSF4Rexx.dll!BSF_impl(RexxCallContext_ * context=0x07f6f870, > _RexxArrayObject * argArray=0x7f0e17d8) Line 5199 C++ > BSF4Rexx.dll!BSF(RexxCallContext_ * context=0x07f6f870, ValueDescriptor * > arguments=0x07f6f88c) Line 5146 + 0x17 bytes C++ > rexx.dll!RexxNativeActivation::callNativeRoutine(RoutineClass * > _routine=0x7f224268, RexxNativeRoutine * _code=0x7f224248, RexxString * > functionName=0x7f196a28, RexxObject * * list=0x7e2a38cc, unsigned int > count=2, ProtectedObject & resultObj={...}) Line 1319 C++ > rexx.dll!RexxNativeRoutine::call(RexxActivity * activity=0x7f3e5c90, > RoutineClass * routine=0x7f224268, RexxString * functionName=0x7f196a28, > RexxObject * * argPtr=0x7e2a38cc, unsigned int count=2, ProtectedObject & > result={...}) Line 316 C++ > rexx.dll!RoutineClass::call(RexxActivity * activity=0x7f3e5c90, RexxString > * msgname=0x7f196a28, RexxObject * * argPtr=0x7e2a38cc, unsigned int > argcount=2, ProtectedObject & result={...}) Line 234 C++ > rexx.dll!PackageManager::callNativeRoutine(RexxActivity * > activity=0x7f3e5c90, RexxString * name=0x7f196a28, RexxObject * * > arguments=0x7e2a38cc, unsigned int argcount=2, ProtectedObject & > result={...}) Line 658 C++ > rexx.dll!SystemInterpreter::invokeExternalFunction(RexxActivation * > activation=0x7d539800, RexxActivity * activity=0x7f3e5c90, RexxString * > target=0x7f196a28, RexxObject * * arguments=0x7e2a38cc, unsigned int > argcount=2, RexxString * calltype=0x7fd5cb00, ProtectedObject & > result={...}) Line 272 + 0x17 bytes C++ > rexx.dll!RexxActivation::externalCall(RexxString * target=0x7f196a28, > unsigned int _argcount=2, RexxExpressionStack * _stack=0x7d5398c0, > RexxString * calltype=0x7fd5cb00, ProtectedObject & resultObj={...}) Line > 2626 + 0x25 bytes C++ > rexx.dll!RexxExpressionFunction::evaluate(RexxActivation * > context=0x7d539800, RexxExpressionStack * stack=0x7d5398c0) Line 225 C++ > rexx.dll!RexxExpressionMessage::evaluate(RexxActivation * > context=0x7d539800, RexxExpressionStack * stack=0x7d5398c0) Line 97 + 0x1b > bytes C++ > rexx.dll!RexxInstructionReturn::execute(RexxActivation * > context=0x7d539800, RexxExpressionStack * stack=0x7d5398c0) Line 70 + 0x1b > bytes C++ > rexx.dll!RexxActivation::run(RexxObject * _receiver=0x7dd904a8, RexxString > * msgname=0x7fcc4c20, RexxObject * * _arglist=0x00000000, unsigned int > _argcount=0, RexxInstruction * start=0x00000000, ProtectedObject & > resultObj={...}) Line 521 C++ > rexx.dll!RexxCode::run(RexxActivity * activity=0x7f3e5c90, RexxMethod * > method=0x7f1c0288, RexxObject * receiver=0x7dd904a8, RexxString * > msgname=0x7fcc4c20, RexxObject * * argPtr=0x00000000, unsigned int > argcount=0, ProtectedObject & result={...}) Line 136 C++ > rexx.dll!RexxMethod::run(RexxActivity * activity=0x7f3e5c90, RexxObject * > receiver=0x7dd904a8, RexxString * msgname=0x7fcc4c20, RexxObject * * > argPtr=0x00000000, unsigned int count=0, ProtectedObject & result={...}) > Line 325 C++ > rexx.dll!RexxObject::messageSend(RexxString * msgname=0x7fcc4c20, > RexxObject * * arguments=0x00000000, unsigned int count=0, ProtectedObject & > result={...}) Line 793 C++ > rexx.dll!RexxObject::sendMessage(RexxString * message=0x7fcc4c20, > ProtectedObject & result={...}) Line 439 + 0x1b bytes C++ > rexx.dll!RexxObject::sendMessage(RexxString * message=0x7fcc4c20) Line > 618 C++ > rexx.dll!RexxObject::uninit() Line 2238 C++ > rexx.dll!UninitDispatcher::run() Line 55 C++ > rexx.dll!RexxNativeActivation::run(TrappingDispatcher & dispatcher={...}) > Line 1642 C++ > rexx.dll!RexxActivity::run(TrappingDispatcher & target={...}) Line > 3061 C++ > rexx.dll!RexxMemory::runUninits() Line 553 C++ > rexx.dll!RexxMemory::checkUninitQueue() Line 198 + 0x18 bytes C++ > rexx.dll!RexxActivation::run(RexxObject * _receiver=0x7f595b98, RexxString > * msgname=0x7dbcfad8, RexxObject * * _arglist=0x7e2a3834, unsigned int > _argcount=2, RexxInstruction * start=0x00000000, ProtectedObject & > resultObj={...}) Line 558 C++ > rexx.dll!RexxCode::run(RexxActivity * activity=0x7f3e5c90, RexxMethod * > method=0x7f02bc08, RexxObject * receiver=0x7f595b98, RexxString * > msgname=0x7dbcfad8, RexxObject * * argPtr=0x7e2a3834, unsigned int > argcount=2, ProtectedObject & result={...}) Line 136 C++ > rexx.dll!RexxMethod::run(RexxActivity * activity=0x7f3e5c90, RexxObject * > receiver=0x7f595b98, RexxString * msgname=0x7dbcfad8, RexxObject * * > argPtr=0x7e2a3834, unsigned int count=2, ProtectedObject & result={...}) > Line 325 C++ > rexx.dll!RexxObject::messageSend(RexxString * msgname=0x7dbcfad8, > RexxObject * * arguments=0x7e2a3834, unsigned int count=2, ProtectedObject & > result={...}) Line 793 C++ > rexx.dll!RexxExpressionStack::send(RexxString * message=0x7dbcfad8, > unsigned int count=2, ProtectedObject & result={...}) Line 74 + 0x33 > bytes C++ > rexx.dll!RexxInstructionMessage::execute(RexxActivation * > context=0x7f3e3b80, RexxExpressionStack * stack=0x7f3e3c40) Line 229 C++ > rexx.dll!RexxActivation::run(RexxObject * _receiver=0x7f3af310, RexxString > * msgname=0x7db939f8, RexxObject * * _arglist=0x7e2a38ac, unsigned int > _argcount=7, RexxInstruction * start=0x00000000, ProtectedObject & > resultObj={...}) Line 521 C++ > rexx.dll!RexxActivation::dispatch() Line 377 + 0x33 bytes C++ > rexx.dll!RexxActivity::runThread() Line 125 C++ > rexx.dll!call_thread_function(void * arguments=0x7f3e5c90) Line 63 C++ > kernel32.dll!7c80b729() > [Frames below may be incorrect and/or missing, no symbols loaded for > kernel32.dll] > rexx.dll!ActivityManager::cacheActivation(RexxActivationBase * > activation=0x00000000) Line 510 C++ > 000001f0() > > > The reported exception is: > > Unhandled exception at 0x00479c3a (rexx.dll) in rexx.exe: 0xC0000005: Access > violation reading location 0x00000014. > > > The code in rexx.exe the debugger points to "SourceLocation.hpp" and there > to the first public inline method: > > inline size_t getLineNumber() { return startLine; } > > > Not sure what I can/should do from here on, so please advise. > > ---rony > > > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Oorexx-devel mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > > |
From: Rick M. <obj...@gm...> - 2009-09-13 17:17:23
|
That is correct, the argument will never by a NULL value. Rick On Sun, Sep 13, 2009 at 11:52 AM, Rony G. Flatscher <Ron...@wu...> wrote: > If the following RexxRoutine is defined: > > RexxRoutine2(RexxObjectPtr, BsfRexxProxy, RexxObjectPtr, proxy, > OPTIONAL_CSTRING, arg2val) > > > Is it possible that with the above RexxRoutine2 signature the first argument > 'proxy' can take on the value NULLOBJECT/NULL ? (That value AFAIK would > indicate that an optional argument was missing.) > > As the first argument 'proxy' is intended to be mandatory (hence not using > "OPTIONAL_RexxObjectPtr"), it should never have a value of NULLOBJECT/NULL, > correct? (The runtime would raise an error in such a case, rather than using > NULLOBJECT/NULL as its value?) > > ---rony > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Oorexx-devel mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > > |
From: Rony G. F. <Ron...@wu...> - 2009-09-13 16:14:35
|
Hi there, > For this one: > > Scenario 1: 32-bit Windows (not tested on 64-bit Windows), exception > in "rexx.exe": > > Here I may get the following exception > >> rexx.dll!00337328() >> > [Frames below may be incorrect and/or missing, no symbols loaded for > rexx.dll] > rexx.dll!002ff218() > rexx.dll!002e9490() > rexx.dll!00303462() > rexx.dll!003473c9() > kernel32.dll!7c80b729() > > You're not going to get anywhere with this, you need to use a debug version > of the interpreter and BSF so you can see what functions these are. > > If, you have a scenario that produces the exception 100% of the time with > a non-debug build, and then never produces the exception with a debug > version - well that's going to be hard. It also is very rare. But, > if it is the case, > you'll need to at least track the addresses down in the map file and use the > *.asm files to see exactly where this sequence is. > O.K. done that, created and installed "ooRexx400_5165-x86_32-debug.exe". Running the tests eventually (the 7th time running the BSF4Rexx suite) will cause the following stack trace: * > rexx.dll!SourceLocation::getLineNumber() Line 51 + 0xa bytes C++ rexx.dll!RexxInstruction::getLineNumber() Line 79 + 0x12 bytes C++ rexx.dll!RexxActivation::getContextLineNumber() Line 2511 C++ rexx.dll!RexxActivation::createStackFrame() Line 4272 + 0x22 bytes C++ rexx.dll!RexxActivationFrame::createStackFrame() Line 58 C++ rexx.dll!RexxActivity::createExceptionObject(long errcode=40900, RexxString * description=0x00000000, RexxArray * additional=0x7d3eeb50, RexxObject * result=0x00000000) Line 906 + 0xd bytes C++ rexx.dll!RexxActivity::raiseException(long errcode=40900, RexxString * description=0x00000000, RexxArray * additional=0x7d3eeb50, RexxObject * result=0x00000000) Line 753 + 0x18 bytes C++ rexx.dll!RexxActivity::reportAnException(long errcode=40900, RexxObject * substitution1=0x7dc112c8) Line 505 C++ rexx.dll!reportException(long error=40900, RexxObject * a1=0x7dc112c8) Line 159 C++ rexx.dll!RaiseException1(RexxThreadContext_ * c=0x7f3e5ca4, unsigned int n=40900, _RexxObjectPtr * o1=0x7dc112c8) Line 1715 C++ BSF4Rexx.dll!RexxThreadContext_::RaiseException1(unsigned int n=40900, _RexxObjectPtr * o=0x7dc112c8) Line 1284 C++ BSF4Rexx.dll!RexxCallContext_::RaiseException1(unsigned int n=40900, _RexxObjectPtr * o=0x7dc112c8) Line 2629 C++ BSF4Rexx.dll!BSF_impl(RexxCallContext_ * context=0x07f6f870, _RexxArrayObject * argArray=0x7f0e17d8) Line 5199 C++ BSF4Rexx.dll!BSF(RexxCallContext_ * context=0x07f6f870, ValueDescriptor * arguments=0x07f6f88c) Line 5146 + 0x17 bytes C++ rexx.dll!RexxNativeActivation::callNativeRoutine(RoutineClass * _routine=0x7f224268, RexxNativeRoutine * _code=0x7f224248, RexxString * functionName=0x7f196a28, RexxObject * * list=0x7e2a38cc, unsigned int count=2, ProtectedObject & resultObj={...}) Line 1319 C++ rexx.dll!RexxNativeRoutine::call(RexxActivity * activity=0x7f3e5c90, RoutineClass * routine=0x7f224268, RexxString * functionName=0x7f196a28, RexxObject * * argPtr=0x7e2a38cc, unsigned int count=2, ProtectedObject & result={...}) Line 316 C++ rexx.dll!RoutineClass::call(RexxActivity * activity=0x7f3e5c90, RexxString * msgname=0x7f196a28, RexxObject * * argPtr=0x7e2a38cc, unsigned int argcount=2, ProtectedObject & result={...}) Line 234 C++ rexx.dll!PackageManager::callNativeRoutine(RexxActivity * activity=0x7f3e5c90, RexxString * name=0x7f196a28, RexxObject * * arguments=0x7e2a38cc, unsigned int argcount=2, ProtectedObject & result={...}) Line 658 C++ rexx.dll!SystemInterpreter::invokeExternalFunction(RexxActivation * activation=0x7d539800, RexxActivity * activity=0x7f3e5c90, RexxString * target=0x7f196a28, RexxObject * * arguments=0x7e2a38cc, unsigned int argcount=2, RexxString * calltype=0x7fd5cb00, ProtectedObject & result={...}) Line 272 + 0x17 bytes C++ rexx.dll!RexxActivation::externalCall(RexxString * target=0x7f196a28, unsigned int _argcount=2, RexxExpressionStack * _stack=0x7d5398c0, RexxString * calltype=0x7fd5cb00, ProtectedObject & resultObj={...}) Line 2626 + 0x25 bytes C++ rexx.dll!RexxExpressionFunction::evaluate(RexxActivation * context=0x7d539800, RexxExpressionStack * stack=0x7d5398c0) Line 225 C++ rexx.dll!RexxExpressionMessage::evaluate(RexxActivation * context=0x7d539800, RexxExpressionStack * stack=0x7d5398c0) Line 97 + 0x1b bytes C++ rexx.dll!RexxInstructionReturn::execute(RexxActivation * context=0x7d539800, RexxExpressionStack * stack=0x7d5398c0) Line 70 + 0x1b bytes C++ rexx.dll!RexxActivation::run(RexxObject * _receiver=0x7dd904a8, RexxString * msgname=0x7fcc4c20, RexxObject * * _arglist=0x00000000, unsigned int _argcount=0, RexxInstruction * start=0x00000000, ProtectedObject & resultObj={...}) Line 521 C++ rexx.dll!RexxCode::run(RexxActivity * activity=0x7f3e5c90, RexxMethod * method=0x7f1c0288, RexxObject * receiver=0x7dd904a8, RexxString * msgname=0x7fcc4c20, RexxObject * * argPtr=0x00000000, unsigned int argcount=0, ProtectedObject & result={...}) Line 136 C++ rexx.dll!RexxMethod::run(RexxActivity * activity=0x7f3e5c90, RexxObject * receiver=0x7dd904a8, RexxString * msgname=0x7fcc4c20, RexxObject * * argPtr=0x00000000, unsigned int count=0, ProtectedObject & result={...}) Line 325 C++ rexx.dll!RexxObject::messageSend(RexxString * msgname=0x7fcc4c20, RexxObject * * arguments=0x00000000, unsigned int count=0, ProtectedObject & result={...}) Line 793 C++ rexx.dll!RexxObject::sendMessage(RexxString * message=0x7fcc4c20, ProtectedObject & result={...}) Line 439 + 0x1b bytes C++ rexx.dll!RexxObject::sendMessage(RexxString * message=0x7fcc4c20) Line 618 C++ rexx.dll!RexxObject::uninit() Line 2238 C++ rexx.dll!UninitDispatcher::run() Line 55 C++ rexx.dll!RexxNativeActivation::run(TrappingDispatcher & dispatcher={...}) Line 1642 C++ rexx.dll!RexxActivity::run(TrappingDispatcher & target={...}) Line 3061 C++ rexx.dll!RexxMemory::runUninits() Line 553 C++ rexx.dll!RexxMemory::checkUninitQueue() Line 198 + 0x18 bytes C++ rexx.dll!RexxActivation::run(RexxObject * _receiver=0x7f595b98, RexxString * msgname=0x7dbcfad8, RexxObject * * _arglist=0x7e2a3834, unsigned int _argcount=2, RexxInstruction * start=0x00000000, ProtectedObject & resultObj={...}) Line 558 C++ rexx.dll!RexxCode::run(RexxActivity * activity=0x7f3e5c90, RexxMethod * method=0x7f02bc08, RexxObject * receiver=0x7f595b98, RexxString * msgname=0x7dbcfad8, RexxObject * * argPtr=0x7e2a3834, unsigned int argcount=2, ProtectedObject & result={...}) Line 136 C++ rexx.dll!RexxMethod::run(RexxActivity * activity=0x7f3e5c90, RexxObject * receiver=0x7f595b98, RexxString * msgname=0x7dbcfad8, RexxObject * * argPtr=0x7e2a3834, unsigned int count=2, ProtectedObject & result={...}) Line 325 C++ rexx.dll!RexxObject::messageSend(RexxString * msgname=0x7dbcfad8, RexxObject * * arguments=0x7e2a3834, unsigned int count=2, ProtectedObject & result={...}) Line 793 C++ rexx.dll!RexxExpressionStack::send(RexxString * message=0x7dbcfad8, unsigned int count=2, ProtectedObject & result={...}) Line 74 + 0x33 bytes C++ rexx.dll!RexxInstructionMessage::execute(RexxActivation * context=0x7f3e3b80, RexxExpressionStack * stack=0x7f3e3c40) Line 229 C++ rexx.dll!RexxActivation::run(RexxObject * _receiver=0x7f3af310, RexxString * msgname=0x7db939f8, RexxObject * * _arglist=0x7e2a38ac, unsigned int _argcount=7, RexxInstruction * start=0x00000000, ProtectedObject & resultObj={...}) Line 521 C++ rexx.dll!RexxActivation::dispatch() Line 377 + 0x33 bytes C++ rexx.dll!RexxActivity::runThread() Line 125 C++ rexx.dll!call_thread_function(void * arguments=0x7f3e5c90) Line 63 C++ kernel32.dll!7c80b729() [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] rexx.dll!ActivityManager::cacheActivation(RexxActivationBase * activation=0x00000000) Line 510 C++ 000001f0() * The reported exception is: Unhandled exception at 0x00479c3a (rexx.dll) in rexx.exe: 0xC0000005: Access violation reading location 0x00000014. * The code in rexx.exe the debugger points to "SourceLocation.hpp" and there to the first public inline method: inline size_t getLineNumber() { return startLine; } Not sure what I can/should do from here on, so please advise. ---rony |
From: Rony G. F. <Ron...@wu...> - 2009-09-13 15:53:26
|
If the following RexxRoutine is defined: RexxRoutine2(RexxObjectPtr, BsfRexxProxy, RexxObjectPtr, proxy, OPTIONAL_CSTRING, arg2val) Is it possible that with the above RexxRoutine2 signature the first argument 'proxy' can take on the value NULLOBJECT/NULL ? (That value AFAIK would indicate that an optional argument was missing.) As the first argument 'proxy' is intended to be mandatory (hence not using "OPTIONAL_RexxObjectPtr"), it should never have a value of NULLOBJECT/NULL, correct? (The runtime would raise an error in such a case, rather than using NULLOBJECT/NULL as its value?) ---rony |
From: Rick M. <obj...@gm...> - 2009-09-13 11:04:25
|
No, you cannot depend on that working. Rick On Sat, Sep 12, 2009 at 11:31 PM, Mark Miesfeld <mie...@gm...> wrote: > Not the best title for this post ... > > The question I want to ask is: can you compare a string object to the > null string and expect any string object to compare equal if that > string object is an empty string? > > Like this > > RexxMethodX(... RexxStringObject, str, ...) > { > if ( str == context->NullString() ) > { > // okay we have an empty string "" > ... > } > > Would an arbitrary string object, that happened to equal "" compare > true to context->NullString()? > > -- > Mark Miesfeld > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Oorexx-devel mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > |
From: Mark M. <mie...@gm...> - 2009-09-13 03:31:15
|
Not the best title for this post ... The question I want to ask is: can you compare a string object to the null string and expect any string object to compare equal if that string object is an empty string? Like this RexxMethodX(... RexxStringObject, str, ...) { if ( str == context->NullString() ) { // okay we have an empty string "" ... } Would an arbitrary string object, that happened to equal "" compare true to context->NullString()? -- Mark Miesfeld |
From: Rony G. F. <Ron...@wu...> - 2009-09-12 14:38:15
|
Mark, thanks. > You should be able to chase the buffer overflow down fairly easily. > > *** buffer overflow detected ***: rexx terminated > ======= Backtrace: ========= > /lib/libc.so.6(__fortify_fail+0x37)[0x7fb7374ee2c7] > /lib/libc.so.6[0x7fb7374ec170] > /lib/libc.so.6[0x7fb7374eb519] > /lib/libc.so.6(_IO_default_xsputn+0x96)[0x7fb737465426] > /lib/libc.so.6(_IO_vfprintf+0x348d)[0x7fb737437e2d] > /lib/libc.so.6(__vsprintf_chk+0x99)[0x7fb7374eb5b9] > /lib/libc.so.6(__sprintf_chk+0x80)[0x7fb7374eb500] > /mnt/root_e/rony/dev/bsf/src/bsf4rexx/libBSF4Rexx.so(BSF_impl+0x348)[0x7fb734d90fb8] > > So it looks like in your BSF() function you are using sprintf() to > format something > into a buffer that is too small. Double your buffer size and see if > it goes away. > > Or, better, look carefully and what you are formatting and figure out what is > bigger than you are anticipating. > Yes, after having posted it and coming back from lunch I started to go after that (it may be caused by debug output only). > For this one: > > Scenario 1: 32-bit Windows (not tested on 64-bit Windows), exception > in "rexx.exe": > > Here I may get the following exception > >> rexx.dll!00337328() >> > [Frames below may be incorrect and/or missing, no symbols loaded for > rexx.dll] > rexx.dll!002ff218() > rexx.dll!002e9490() > rexx.dll!00303462() > rexx.dll!003473c9() > kernel32.dll!7c80b729() > > You're not going to get anywhere with this, you need to use a debug version > of the interpreter and BSF so you can see what functions these are. > > If, you have a scenario that produces the exception 100% of the time with > a non-debug build, and then never produces the exception with a debug > version - well that's going to be hard. It also is very rare. But, > if it is the case, > you'll need to at least track the addresses down in the map file and use the > *.asm files to see exactly where this sequence is. > > That means you'll need to build the intepreter yourself using the release code. > The map files will be in Win32Rel and the *.asm files are in Win32Rel\ASM. > Thanks for this advice! > If I were tackling this, I'd fix those 2 bugs first, in the order I > listed, before even thinking about the third one. > Again, thanks! ---rony |