#716 Package loader function called on each RexxCreateInstance()

v4.0
closed
Rick McGuire
APIs (66)
5
2012-08-14
2009-06-03
No

The show-case archive will be mailed separately by e-mail (it's 1,7MB large):

If a Java program uses different threads to create Rexx interpreter instances, then for each such created Rexx instance the denoted package loader is run as can be seen in the debug output at the very top of the output.

To proceed: just unzip the archive "loaderFunctionBug.zip-zip" (note the ending ".zip-zip"), which will place all files into a subdirectory named "loaderFunctionBug". Then change into this subdirectory and enter the command:

java -cp .;bsf4r_debug.zip RgfTestMany

Here's the readme.txt file which explains how to start the program:
-------------- cut here -------------
- unpack archive

  • run Java program by entering (compiled with Java 6):

    java -cp .;bsf4r_debug.zip RgfTestMany
    
  • if the BsfLoader runs, the string "/// ===> ===> === > in bsfLoader(), tid=["... gets
    output on the screen

    void RexxEntry bsfLoader (RexxThreadContext *rtc)
    {
    // #if defined(DEBUG1) || defined (DEBUG40)
        #ifdef UNIX
            pthread_t
        #else   // WIN32
            TID
        #endif
                tid=RgfGetTID();
    
        fprintf(stderr, "/// ===> ===> === > in bsfLoader(), tid=[%lu], c_rii_ID=[%p] ...\n", (unsigned long) tid, rtc->instance);
        fflush(stderr);
    // #endif
    
        rgfInitCriticalSection();        // Initialize critical section
    
    }
    

---rgf, 2009-06-03

P.S.: The unloader ("bsfUnloader()")does not run, but this may be due to something the native
code is doing. Will chase that down, once the termination of multiple threads works
(currently Terminate() will cause a segmentation fault, hence I did not activate that
in the Java program; maybe that is due to wrongly initialized critical section locks,
as the bsfLoader() is called multiple times).
-------------- cut here -------------

Discussion

  • Oops, forgot to pinpoint to where the "action is":

    BSF4Rexx.cc, line # 5865, function named "Java_org_rexxla_bsf_engines_rexx_RexxAndJava_jniRexxCreateInterpreterInstance"

    BSF4Rexx.cc, line # 5765, function named "bsfLoader"

     


Anonymous


Cancel   Add attachments