RFR: 8351733: [macos] Crash when creating too many nested event loops [v4]
Martin Fox
mfox at openjdk.org
Wed Mar 26 17:37:39 UTC 2025
> 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 two additional commits since the last revision:
- Set limit on nested event loop count to 200 which seems less arbitrary
- The max nested event loop limit is now platform-independent
-------------
Changes:
- all: https://git.openjdk.org/jfx/pull/1741/files
- new: https://git.openjdk.org/jfx/pull/1741/files/0d44f217..b08594fe
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jfx&pr=1741&range=03
- incr: https://webrevs.openjdk.org/?repo=jfx&pr=1741&range=02-03
Stats: 78 lines in 7 files changed: 19 ins; 44 del; 15 mod
Patch: https://git.openjdk.org/jfx/pull/1741.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/1741/head:pull/1741
PR: https://git.openjdk.org/jfx/pull/1741
More information about the openjfx-dev
mailing list