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

Reply via email to