On Mon, 24 Mar 2025 15:30:33 GMT, Martin Fox <m...@openjdk.org> wrote:
>> There is an undocumented limit on nesting calls to CFRunLoopRun (or the >> equivalent wrapper NSRunLoop methods). When the limit is hit the OS >> terminates the Java app. The situation arises when a JavaFX app creates too >> many nested event loops from within Platform.runLater runnables. >> >> This PR doesn't change the limit (which is 250+ nested loops) but it does >> throw an exception just before the limit is reached so a JavaFX developer >> will get a useful Java stack trace instead of an OS crash log. >> >> On the Mac the nested event loop has two stages: first we ask the run loop >> to run, then we pull an event out and process it. A Platform.runLater >> runnable is executed in the first stage so if the runnable starts a new >> nested event loop the system will re-enter CFRunLoopRun. The same isn't true >> if an input event handler starts a new nested event loop; at that point >> we're in stage two and are past the call to CFRunLoopRun. > > Martin Fox has updated the pull request incrementally with one additional > commit since the last revision: > > Added explanation for limit on nested run loop calls modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/QuantumToolkit.java line 637: > 635: if (!canStartNestedEventLoop()) { > 636: if (!Application.GetApplication().canStartNestedEventLoop()) > { > 637: throw new RuntimeException("Exceeded limit on nested > event loops"); should we tell what the limit is (using the static constant mentioned earlier)? e.g. "Too many nested event loops (250)"? or something like that. ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1741#discussion_r2010377313