Dear Dom,

thank you *very* much for your efforts and information!

On 18.08.2025 00:24, dominicjw...@gmail.com wrote:

Hi everyone,

Sorry but I’ve been away for a bit and can see everything has got quite lively 
in my absence!

There may have been a misunderstanding but the change I made was in InterpreterInstance::terminate() and it looks like the patch tried out was in InterpreterInstance::detachThread. Mostly my fault as I wasn’t able to add a diff file earlier because all the line numbers are out in my source file due to the various printfs and other test changes  (all commented out apart from the actual one-line change) currently present in my version.

This was never meant to be a proper fix by the way but a pointer to the general direction of a real one for those more knowledgeable with the code 😊

Anyway looking at the very recent SVN version I was working from, a diff file would be more like the following. Note the start line is 559 which is near the very end of  InterpreterInstance::terminate(). Please don’t try to “apply” it as I’ve constructed it by inspection but hopefully its readable enough to make it clear what I’ve changed.

+++ interpreter/runtime/InterpreterInstance.cpp (working copy)
@@ -559,8 +559,9 @@

 commandHandlers = OREF_NULL;

requiresFiles = OREF_NULL;

+ ActivityManager::releaseAccess();

// tell the main interpreter controller we're gone.

Interpreter::terminateInterpreterInstance(this);

return true;

}

I should mention that on my machine I don’t get crashes running with the patch in *either* location (i.e. including the one which crashes for Rony) so there might be some magic working just for me and it might make no difference for anyone else but I’d definitely suggest trying with the change just in InterpreterInstance::terminate()

Indeed, it seems that I placed the releaseAccess() at a different place. Now I changed the code to match your hand-made diff, here the "svn diff" of my actual change, which is almost identical to the manual one! :)

   D:\orx.work202312\main_trunk_20240312\trunk>svn diff
   Index: interpreter/runtime/InterpreterInstance.cpp
   ===================================================================
   --- interpreter/runtime/InterpreterInstance.cpp (revision 13006)
   +++ interpreter/runtime/InterpreterInstance.cpp (working copy)
   @@ -559,6 +559,7 @@
         commandHandlers = OREF_NULL;
         requiresFiles = OREF_NULL;

   +ActivityManager::releaseAccess();

         // tell the main interpreter controller we're gone.
         Interpreter::terminateInterpreterInstance(this);

With this change fxml_99 runs successfully, and fxml_26 does not crash anymore! However it experiences a runtime error in not filling the TableView with the person records. fxml_27 is based on fxml_27 and does not crash either, but experiences the same problem as fxml_26. (Also fxml_25 which starts the series of TableView demonstrations ran once with a crash, but then executed without a crash and functions.)

HTH,

---rony

P.S.: Sorry for not being too responsive at the moment, am heavily side tracked 
for the next days.



*From:*Rony G. Flatscher <rony.flatsc...@wu.ac.at>
*Sent:* 17 August 2025 21:40
*To:* oorexx-devel@lists.sourceforge.net
*Subject:* [Oorexx-devel] Hack causes new crashes when calling back from native code into ooRexx, hence backing out ... (Re: Some more information, and a random run (Re: Question ad a hang situation

Well, although the testsuite ran successfully on my system there are now new crashes for callbacks from native code into Rexx.

Running the sample "BSF4ooRexx\samples\JavaFX\fxml_26\demoTableViewComboBoxCell.rex" now crashes when populating the table, making it editable and then delete a line (which causes a RexxProxy to be garbage collected, freeing the contained Rexx peer object).

Here the Java 17 hs_err_pid29420.log (full log attached):

    #

    # A fatal error has been detected by the Java Runtime Environment:

    #

    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff996433d68, 
pid=29420, tid=35512

    #

    # JRE version: OpenJDK Runtime Environment (17.0.6+10) (build 17.0.6+10-LTS)

    # Java VM: OpenJDK 64-Bit Server VM (17.0.6+10-LTS, mixed mode, sharing, 
tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64)

    # Problematic frame:

    # C  [rexx.dll+0x133d68]  Activity::checkStackSpace+0x28

    #

    # No core dump will be written. Minidumps are not enabled by default on 
client versions of Windows

    #

    # If you would like to submit a bug report, please visit:

    #https://bell-sw.com/support

    # The crash happened outside the Java Virtual Machine in native code.

    # See problematic frame for where to report the bug.

    #

    ---------------  S U M M A R Y ------------

    Command Line:

    Host: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz, 8 cores, 23G,  Windows 10 , 
64 bit Build 19041 (10.0.19041.5915)

    Time: Sun Aug 17 21:31:28 2025 W. Europe Daylight Time elapsed time: 
17.545102 seconds (0d 0h 0m 17s)

    ---------------  T H R E A D  ---------------

    Current thread (0x000001f0b06f8760):  JavaThread 
"RexxCleanupRef.runnableCleaner_1" [_thread_in_native, id=35512, 
stack(0x0000007bf4200000,0x0000007bf4a00000)]

    Stack: [0x0000007bf4200000,0x0000007bf4a00000],  sp=0x0000007bf49feb60,  
free space=8186k

    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
code)

    C  [rexx.dll+0x133d68]  Activity::checkStackSpace+0x28  (activity.cpp:2265)

    C  [rexx.dll+0x60fcc]  RexxObject::messageSend+0x3c  (objectclass.cpp:871)

    C  [rexx.dll+0x154d53]  ExpressionStack::send+0x73  (expressionstack.hpp:80)

    C  [rexx.dll+0x1544ae]  RexxExpressionMessage::evaluate+0x17e  
(expressionmessage.cpp:191)

    C  [rexx.dll+0x154398]  RexxExpressionMessage::evaluate+0x68  
(expressionmessage.cpp:158)

    C  [rexx.dll+0x154398]  RexxExpressionMessage::evaluate+0x68  
(expressionmessage.cpp:158)

    C  [rexx.dll+0x15b0f1]  RexxInstructionAssignment::execute+0xd1  
(assignmentinstruction.cpp:129)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe53a7]  RexxCode::run+0x97  (rexxcode.cpp:211)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x333f7]  RexxObject::sendMessage+0x47  (objectclass.hpp:509)

    C  [rexx.dll+0x5f229]  RexxObject::uninit+0x69  (objectclass.cpp:2584)

    C  [rexx.dll+0x109796]  UninitDispatcher::run+0x36  
(uninitdispatcher.cpp:55)

    C  [rexx.dll+0xe927d]  NativeActivation::run+0x9d  
(nativeactivation.cpp:1743)

    C  [rexx.dll+0x13687c]  Activity::run+0x5c  (activity.cpp:3452)

    C  [rexx.dll+0x1188d9]  MemoryObject::runUninits+0x129  (rexxmemory.cpp:373)

    C  [rexx.dll+0xdf3d4]  MemoryObject::checkUninitQueue+0x34  
(rexxmemory.hpp:123)

    C  [rexx.dll+0x136665]  Activity::exitCurrentThread+0x45  (activity.cpp:325)

    C  [rexx.dll+0xa3efc]  ApiContext::~ApiContext+0x6c  (contextapi.hpp:267)

    C  [rexx.dll+0xab16c]  NewStringFromAsciiz+0x7c  
(threadcontextstubs.cpp:1100)

    C  [BSF4ooRexx850.DLL+0xdd4a]

    C  0x000001f0973fd621

    Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)

    j  
org.rexxla.bsf.engines.rexx.RexxCleanupRef.jniUnregisterRexxObject(Ljava/lang/String;)I+0

    j  org.rexxla.bsf.engines.rexx.RexxCleanupRef.finalizeRexxObject()V+115

    j  
org.rexxla.bsf.engines.rexx.RexxCleanupRef.access$100(Lorg/rexxla/bsf/engines/rexx/RexxCleanupRef;)V+1

    j  org.rexxla.bsf.engines.rexx.RexxCleanupRef$1.run()V+17

    j  java.lang.Thread.run()V+11java.base@17.0.6

    v  ~StubRoutines::call_stub

    siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), reading address 
0x0000000000000100

    Register to memory mapping:

    RIP=0x00007ff996433d68 rexx.dll::Activity::checkStackSpace + 0x28

    RAX=0x0000007bf49feb80 is pointing into the stack for thread: 
0x000001f0b06f8760

    RBX=0x0000007bf49ff5c0 is pointing into the stack for thread: 
0x000001f0b06f8760

    RCX=0x0 is NULL

    RDX=0x000001f0860151f0 points into unknown readable memory: 
0x00007ff99661ef20 | 20 ef 61 96 f9 7f 00 00

    RSP=0x0000007bf49feb60 is pointing into the stack for thread: 
0x000001f0b06f8760

    RBP=0x000001f0b06f8a08 points into unknown readable memory: 
0x00007ff976809f30 | 30 9f 80 76 f9 7f 00 00

    RSI=0x000001f083ea5ba0 points into unknown readable memory: 
0x303635323331322d | 2d 32 31 33 32 35 36 30

    RDI=0x0000007bf49feb90 is pointing into the stack for thread: 
0x000001f0b06f8760

    R8 =0x000001f086be2ba8 points into unknown readable memory: 
0x000001f085cd0620 | 20 06 cd 85 f0 01 00 00

    R9 =0x0 is NULL

    R10=0x00007ff996636608 rexx.dll::`string' + 0x0

    R11=0x000001f085f7ddc0 points into unknown readable memory: 
0x000001f085fabb30 | 30 bb fa 85 f0 01 00 00

    R12=0x0 is NULL

    R13={method} {0x000001f0b0c3f7e8} 'jniUnregisterRexxObject' 
'(Ljava/lang/String;)I' in 'org/rexxla/bsf/engines/rexx/RexxCleanupRef'

    R14=0x0000007bf49ff5c8 is pointing into the stack for thread: 
0x000001f0b06f8760

    R15=0x000001f0b06f8760 is a thread

    ... cut ... (see attached hs_err_pid29420.log)

--------------

Activating "::options trace r" with .traceObject~option="F" and running on Java 23 causes the following crash (hs_err_pid18472.log enclosed):

    #

    # A fatal error has been detected by the Java Runtime Environment:

    #

    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff995f13d68, 
pid=18472, tid=33888

    #

    # JRE version: OpenJDK Runtime Environment (23.0.2+9) (build 23.0.2+9)

    # Java VM: OpenJDK 64-Bit Server VM (23.0.2+9, mixed mode, sharing, tiered, 
compressed oops, compressed class ptrs, g1 gc, windows-amd64)

    # Problematic frame:

    # C  [rexx.dll+0x133d68]  Activity::checkStackSpace+0x28

    #

    # No core dump will be written. Minidumps are not enabled by default on 
client versions of Windows

    #

    # If you would like to submit a bug report, please visit:

    #https://bell-sw.com/support

    # The crash happened outside the Java Virtual Machine in native code.

    # See problematic frame for where to report the bug.

    #

    ---------------  S U M M A R Y ------------

    Command Line:

    Host: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz, 8 cores, 23G,  Windows 10 , 
64 bit Build 19041 (10.0.19041.5915)

    Time: Sun Aug 17 21:53:01 2025 W. Europe Daylight Time elapsed time: 
2.868394 seconds (0d 0h 0m 2s)

    ---------------  T H R E A D  ---------------

    Current thread (0x000001f077948800):  JavaThread "JavaFX Application 
Thread"        [_thread_in_native, id=33888, 
stack(0x000000ee2fe00000,0x000000ee30600000) (8192K)]

    Stack: [0x000000ee2fe00000,0x000000ee30600000],  sp=0x000000ee305fd1c0,  
free space=8180k

    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
code)

    C  [rexx.dll+0x133d68]  Activity::checkStackSpace+0x28  (activity.cpp:2265)

    C  [rexx.dll+0x60fcc]  RexxObject::messageSend+0x3c  (objectclass.cpp:871)

    C  [rexx.dll+0x333f7]  RexxObject::sendMessage+0x47  (objectclass.hpp:509)

    C  [rexx.dll+0x5f5fe]  RexxObject::stringValue+0x4e  (objectclass.cpp:1160)

    C  [rexx.dll+0xd59b4]  RexxActivation::traceValue+0x74  
(rexxactivation.cpp:3710)

    C  [rexx.dll+0x154f19]  RexxActivation::traceResult+0x49  
(rexxactivation.hpp:369)

    C  [rexx.dll+0x17985a]  RexxInstructionExpression::evaluateExpression+0x6a  
(rexxinstruction.cpp:231)

    C  [rexx.dll+0x1792cb]  RexxInstructionReturn::execute+0x4b  
(returninstruction.cpp:72)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe547b]  RexxCode::call+0xbb  (rexxcode.cpp:188)

    C  [rexx.dll+0x71e70]  RoutineClass::call+0xa0  (routineclass.cpp:194)

    C  [rexx.dll+0xd44c7]  RexxActivation::externalCall+0xb7  
(rexxactivation.cpp:3047)

    C  [rexx.dll+0x153a27]  RexxExpressionFunction::evaluate+0x247  
(expressionfunction.cpp:214)

    C  [rexx.dll+0x15b08a]  RexxInstructionAssignment::execute+0x6a  
(assignmentinstruction.cpp:118)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe53a7]  RexxCode::run+0x97  (rexxcode.cpp:211)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x33460]  RexxObject::sendMessage+0x50  (objectclass.hpp:510)

    C  [rexx.dll+0x3068d]  RexxClass::completeNewObject+0xbd  
(classclass.cpp:1899)

    C  [rexx.dll+0x5ed94]  RexxObject::newRexx+0xc4  (objectclass.cpp:2644)

    C  [rexx.dll+0xcce61]  CPPCode::run+0xe1  (cppcode.cpp:147)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x154d53]  ExpressionStack::send+0x73  (expressionstack.hpp:80)

    C  [rexx.dll+0x173a77]  RexxInstructionMessage::execute+0x197  
(messageinstruction.cpp:189)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe53a7]  RexxCode::run+0x97  (rexxcode.cpp:211)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x6179a]  RexxObject::sendMessage+0x6a  (objectclass.cpp:748)

    C  [rexx.dll+0xa778d]  SendMessageArray+0xcd  (threadcontextstubs.cpp:167)

    C  [BSF4ooRexx850.DLL+0xd992]  (no source info available)

    C  0x000001f06099d207  (no source info available)

    The last pc belongs to native method entry point (kind = native) (printed 
below).

    Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)

    j  
org.rexxla.bsf.engines.rexx.RexxAndJava.jniRexxSendMessageToRexxObject(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;+0

    j  
org.rexxla.bsf.engines.rexx.RexxEngine.call(Lorg/rexxla/bsf/engines/rexx/RexxProxy;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;+590

    j  
org.rexxla.bsf.engines.rexx.RexxProxy.invoke(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;+123

    j  
org.rexxla.bsf.engines.rexx.onTheFly.Application_$RexxExtendClass$_6B40AC3E.start(Ljavafx/stage/Stage;)V+38

    j  
com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Ljava/util/concurrent/atomic/AtomicBoolean;Ljavafx/application/Application;)V+20javafx.graphics@23.0.2

    j  
com.sun.javafx.application.LauncherImpl$$Lambda+0x000001f001146cf0.run()V+8javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(Ljava/lang/Runnable;Ljava/util/concurrent/CountDownLatch;)V+1javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl$$Lambda+0x000001f0011434f8.run()V+8javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Ljava/lang/Runnable;)Ljava/lang/Void;+1javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl$$Lambda+0x000001f0011468a0.run()Ljava/lang/Object;+4javafx.graphics@23.0.2

    J 1258 c1 
java.security.AccessController.executePrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/lang/Class;)Ljava/lang/Object;java.base@23.0.2
 (69 bytes) @ 0x000001f059612444 [0x000001f0596122e0+0x0000000000000164]

    j  
java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;+13java.base@23.0.2

    j  
com.sun.javafx.application.PlatformImpl.lambda$runLater$11(Ljava/lang/Runnable;Ljava/security/AccessControlContext;)V+7javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl$$Lambda+0x000001f001146440.run()V+8javafx.graphics@23.0.2

    j  
com.sun.glass.ui.InvokeLaterDispatcher$Future.run()V+4javafx.graphics@23.0.2

    v  ~StubRoutines::call_stub 0x000001f060990fcd

    j  
com.sun.glass.ui.win.WinApplication._runLoop(Ljava/lang/Runnable;)V+0javafx.graphics@23.0.2

    j  
com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(ILjava/lang/Runnable;)V+8javafx.graphics@23.0.2

    j  
com.sun.glass.ui.win.WinApplication$$Lambda+0x000001f001134770.run()V+12javafx.graphics@23.0.2

    j  
java.lang.Thread.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V+5java.base@23.0.2

    j  java.lang.Thread.run()V+19java.base@23.0.2

    v  ~StubRoutines::call_stub 0x000001f060990fcd

    siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), reading address 
0x0000000000000100

    Registers:

    RAX=0x000000ee305fd1e0, RBX=0x0000000000000000, RCX=0x0000000000000000, 
RDX=0x000001f04d8db8f0

    RSP=0x000000ee305fd1c0, RBP=0x000001f077948bc0, RSI=0x000001f04ec86870, 
RDI=0x000000ee305fd1f0

    R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, 
R11=0x0000000000000246

    R12=0x0000000000000000, R13=0x000001f04e3e7050, R14=0x000001f04e40d3b0, 
R15=0x000001f077948800

    RIP=0x00007ff995f13d68, EFLAGS=0x0000000000010206

    .... cut ... (see hs_err_pid18472.log)

----

And another run on Java 23 with tracing enabled and a crash:

    #

    # A fatal error has been detected by the Java Runtime Environment:

    #

    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff995f13d68, 
pid=8976, tid=36040

    #

    # JRE version: OpenJDK Runtime Environment (23.0.2+9) (build 23.0.2+9)

    # Java VM: OpenJDK 64-Bit Server VM (23.0.2+9, mixed mode, sharing, tiered, 
compressed oops, compressed class ptrs, g1 gc, windows-amd64)

    # Problematic frame:

    # C  [rexx.dll+0x133d68]  Activity::checkStackSpace+0x28

    #

    # No core dump will be written. Minidumps are not enabled by default on 
client versions of Windows

    #

    # If you would like to submit a bug report, please visit:

    #https://bell-sw.com/support

    # The crash happened outside the Java Virtual Machine in native code.

    # See problematic frame for where to report the bug.

    #

    ---------------  S U M M A R Y ------------

    Command Line:

    Host: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz, 8 cores, 23G,  Windows 10 , 
64 bit Build 19041 (10.0.19041.5915)

    Time: Sun Aug 17 22:05:17 2025 W. Europe Daylight Time elapsed time: 
2.553712 seconds (0d 0h 0m 2s)

    ---------------  T H R E A D  ---------------

    Current thread (0x000001c97dc2f990):  JavaThread "JavaFX Application 
Thread"        [_thread_in_native, id=36040, 
stack(0x0000006c49800000,0x0000006c4a000000) (8192K)]

    Stack: [0x0000006c49800000,0x0000006c4a000000],  sp=0x0000006c49ffbed0,  
free space=8175k

    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
code)

    C  [rexx.dll+0x133d68]  Activity::checkStackSpace+0x28  (activity.cpp:2265)

    C  [rexx.dll+0x60fcc]  RexxObject::messageSend+0x3c  (objectclass.cpp:871)

    C  [rexx.dll+0x154d53]  ExpressionStack::send+0x73  (expressionstack.hpp:80)

    C  [rexx.dll+0x1544ae]  RexxExpressionMessage::evaluate+0x17e  
(expressionmessage.cpp:191)

    C  [rexx.dll+0x172779]  RexxInstructionIf::execute+0x59  
(ifinstruction.cpp:139)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe53a7]  RexxCode::run+0x97  (rexxcode.cpp:211)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x154d53]  ExpressionStack::send+0x73  (expressionstack.hpp:80)

    C  [rexx.dll+0x173a77]  RexxInstructionMessage::execute+0x197  
(messageinstruction.cpp:189)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe53a7]  RexxCode::run+0x97  (rexxcode.cpp:211)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x33460]  RexxObject::sendMessage+0x50  (objectclass.hpp:510)

    C  [rexx.dll+0x3068d]  RexxClass::completeNewObject+0xbd  
(classclass.cpp:1899)

    C  [rexx.dll+0x5ed94]  RexxObject::newRexx+0xc4  (objectclass.cpp:2644)

    C  [rexx.dll+0xcce61]  CPPCode::run+0xe1  (cppcode.cpp:147)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x154d53]  ExpressionStack::send+0x73  (expressionstack.hpp:80)

    C  [rexx.dll+0x1544ae]  RexxExpressionMessage::evaluate+0x17e  
(expressionmessage.cpp:191)

    C  [rexx.dll+0x15b0f1]  RexxInstructionAssignment::execute+0xd1  
(assignmentinstruction.cpp:129)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe53a7]  RexxCode::run+0x97  (rexxcode.cpp:211)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0xdab0e]  RexxActivation::createTraceObject+0x6e  
(rexxactivation.cpp:5146)

    C  [rexx.dll+0xdb2ee]  RexxActivation::processTraceInfo+0x9e  
(rexxactivation.cpp:5229)

    C  [rexx.dll+0xd5b0e]  RexxActivation::traceValue+0x1ce  
(rexxactivation.cpp:3720)

    C  [rexx.dll+0x154f19]  RexxActivation::traceResult+0x49  
(rexxactivation.hpp:369)

    C  [rexx.dll+0x17985a]  RexxInstructionExpression::evaluateExpression+0x6a  
(rexxinstruction.cpp:231)

    C  [rexx.dll+0x1792cb]  RexxInstructionReturn::execute+0x4b  
(returninstruction.cpp:72)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe547b]  RexxCode::call+0xbb  (rexxcode.cpp:188)

    C  [rexx.dll+0x71e70]  RoutineClass::call+0xa0  (routineclass.cpp:194)

    C  [rexx.dll+0xd44c7]  RexxActivation::externalCall+0xb7  
(rexxactivation.cpp:3047)

    C  [rexx.dll+0x153a27]  RexxExpressionFunction::evaluate+0x247  
(expressionfunction.cpp:214)

    C  [rexx.dll+0x15b08a]  RexxInstructionAssignment::execute+0x6a  
(assignmentinstruction.cpp:118)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe53a7]  RexxCode::run+0x97  (rexxcode.cpp:211)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x33460]  RexxObject::sendMessage+0x50  (objectclass.hpp:510)

    C  [rexx.dll+0x3068d]  RexxClass::completeNewObject+0xbd  
(classclass.cpp:1899)

    C  [rexx.dll+0x5ed94]  RexxObject::newRexx+0xc4  (objectclass.cpp:2644)

    C  [rexx.dll+0xcce61]  CPPCode::run+0xe1  (cppcode.cpp:147)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x154d53]  ExpressionStack::send+0x73  (expressionstack.hpp:80)

    C  [rexx.dll+0x173a77]  RexxInstructionMessage::execute+0x197  
(messageinstruction.cpp:189)

    C  [rexx.dll+0xd1ad2]  RexxActivation::run+0x632  (rexxactivation.cpp:618)

    C  [rexx.dll+0xe53a7]  RexxCode::run+0x97  (rexxcode.cpp:211)

    C  [rexx.dll+0x42d62]  MethodClass::run+0x82  (methodclass.cpp:172)

    C  [rexx.dll+0x61126]  RexxObject::messageSend+0x196  (objectclass.cpp:901)

    C  [rexx.dll+0x6179a]  RexxObject::sendMessage+0x6a  (objectclass.cpp:748)

    C  [rexx.dll+0xa778d]  SendMessageArray+0xcd  (threadcontextstubs.cpp:167)

    C  [BSF4ooRexx850.DLL+0x1e468]  RexxThreadContext_::SendMessageA+0x38  
(oorexxapi.h:879)

    C  [BSF4ooRexx850.DLL+0xabc6]  
Java_org_rexxla_bsf_engines_rexx_RexxAndJava_jniRexxSendMessageToRexxObject+0xaf6
  (bsf4oorexx.cc:10543)

    C  0x000001c9255cd207  (no source info available)

    The last pc belongs to native method entry point (kind = native) (printed 
below).

    Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)

    j  
org.rexxla.bsf.engines.rexx.RexxAndJava.jniRexxSendMessageToRexxObject(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;+0

    j  
org.rexxla.bsf.engines.rexx.RexxEngine.call(Lorg/rexxla/bsf/engines/rexx/RexxProxy;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;+590

    j  
org.rexxla.bsf.engines.rexx.RexxProxy.invoke(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;+123

    j  
org.rexxla.bsf.engines.rexx.onTheFly.Application_$RexxExtendClass$_6B40AC3E.start(Ljavafx/stage/Stage;)V+38

    j  
com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Ljava/util/concurrent/atomic/AtomicBoolean;Ljavafx/application/Application;)V+20javafx.graphics@23.0.2

    j  
com.sun.javafx.application.LauncherImpl$$Lambda+0x000001c939146ee8.run()V+8javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(Ljava/lang/Runnable;Ljava/util/concurrent/CountDownLatch;)V+1javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl$$Lambda+0x000001c939143730.run()V+8javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Ljava/lang/Runnable;)Ljava/lang/Void;+1javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl$$Lambda+0x000001c939146a98.run()Ljava/lang/Object;+4javafx.graphics@23.0.2

    J 1231 c1 
java.security.AccessController.executePrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/lang/Class;)Ljava/lang/Object;java.base@23.0.2
 (69 bytes) @ 0x000001c91e235a44 [0x000001c91e2358e0+0x0000000000000164]

    j  
java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;+13java.base@23.0.2

    j  
com.sun.javafx.application.PlatformImpl.lambda$runLater$11(Ljava/lang/Runnable;Ljava/security/AccessControlContext;)V+7javafx.graphics@23.0.2

    j  
com.sun.javafx.application.PlatformImpl$$Lambda+0x000001c9391461f8.run()V+8javafx.graphics@23.0.2

    j  
com.sun.glass.ui.InvokeLaterDispatcher$Future.run()V+4javafx.graphics@23.0.2

    v  ~StubRoutines::call_stub 0x000001c9255c0fcd

    j  
com.sun.glass.ui.win.WinApplication._runLoop(Ljava/lang/Runnable;)V+0javafx.graphics@23.0.2

    j  
com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(ILjava/lang/Runnable;)V+8javafx.graphics@23.0.2

    j  
com.sun.glass.ui.win.WinApplication$$Lambda+0x000001c939134970.run()V+12javafx.graphics@23.0.2

    j  
java.lang.Thread.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V+5java.base@23.0.2

    j  java.lang.Thread.run()V+19java.base@23.0.2

    v  ~StubRoutines::call_stub 0x000001c9255c0fcd

    siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), reading address 
0x0000000000000100

    ... cut ... (see enclosed hs_err_pid8976.log)

---

So it looks like the hack may fix the hang but may cause crashes in other use-cases where native code calls into ooRexx (which may have been expected).

Will therefore back out the hack from trunk.

We need a real fix.

---rony

On 17.08.2025 21:12, Rony G. Flatscher wrote:

    Dear Dom,

    On 17.08.2025 17:31, dominicjw...@gmail.com wrote:

        I am one such masochist that Rony was referring to😊

    Very glad that you are one! ;)

        It seems that in InterpreterInstance::terminate() there can be 
situations where the kernel lock ends up being taken twice. It is only ever 
released once and this means that when it has been locked twice the thread 
leaves the function owning the kernel lock and can go on happily locking and 
releasing it but any other thread trying to access it is immediately and 
forever locked.

        I spent quite some time trying to figure out and code for the 
individual cases (I think there may be at least two) to ensure the acquires and 
releases are always balanced but in the end I gave up and as a hack added an 
extra call to ActivityManager::releaseAccess() at the end of this function. 
This seems to have done the trick and the program runs ok with this in place.

    This is *great*, thank you very much!

    Could you briefly describe the two individual cases, if you have them still 
handy?

        The reasons for the additional kernel locks may be easy to identify or 
they may a symptom of problems elsewhere that could be very subtle or nasty but 
hopefully this provides a starting point

    Given that your hack removes the hang, and given that the testsuite runs to 
completion on my
    Windows machine, I would like to apply that hack to trunk to see, how it 
does on all Jenkin
    hosted operating systems.

    Here the patch I have been using and testing (yes it fixes the hang, *very* 
appreciated!!):

        Index: interpreter/runtime/InterpreterInstance.cpp

        ===================================================================

        --- interpreter/runtime/InterpreterInstance.cpp (revision 13004)

        +++ interpreter/runtime/InterpreterInstance.cpp (working copy)

        @@ -299,6 +299,7 @@

              {

                  terminationSem.post();

              }

        +    ActivityManager::releaseAccess();   // hack kudos to Dom Wise 
(20250817 e-mail on developer list), remove kernel lock again

              return true;

          }

    Of course, once a fix can be found, this patch should be replaced.

    First I will create an entry in the bug tracker and then commit that patch 
and record it
    against the bug.

    Dom, again *many* thanks for your efforts and sharing your findings, *very* 
much appreciated!

    Best regards

    ---rony



        -----Original Message-----

From: Rony G. Flatscher<rony.flatsc...@wu.ac.at> <mailto:rony.flatsc...@wu.ac.at>
        Sent: 17 August 2025 09:30

        To:oorexx-devel@lists.sourceforge.net

        Subject: Re: [Oorexx-devel] Some more information, and a random run 
(Re: Question ad a hang situation

        Hi Michael,

        On 17.08.2025 03:47, Michael Lueck wrote:

            W O W ! ! ! Bravo!!! A most impressive success milestone!

        but not solved yet. It looks as it is somehow linked to terminating 
interpreter instances right before the callback from Java into ooRexx. The 
change I made was a debug output statement from the Java garbage collector run 
(collecting the peer Java RexxEngines) right before the ooRexx instance gets 
terminated from the Java side, as if this little time span makes the difference 
(at least on my

        machine) and allows the Java callback into ooRexx to not block.

        ---rony

_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to