Fix app freeze caused by nested CFRunLoopRun() on main thread#120
Open
cmeinerd wants to merge 1 commit intomilgra:masterfrom
Open
Fix app freeze caused by nested CFRunLoopRun() on main thread#120cmeinerd wants to merge 1 commit intomilgra:masterfrom
cmeinerd wants to merge 1 commit intomilgra:masterfrom
Conversation
The app became unresponsive ("Not Responding") because startEventSession
called CFRunLoopRun() which blocked the main thread in a nested run loop,
preventing NSApplication from processing UI events. In a Cocoa app the
main run loop is already running via [NSApp run], so only adding/removing
the event tap source is needed.
Also adds disableAutomaticTermination/disableSuddenTermination to prevent
macOS from killing this windowless menu bar app.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
CFRunLoopRun()fromstartEventSessionandCFRunLoopStop()fromstopEventSession— the nested run loop blocked the main thread, causing the app to become unresponsive ("Not Responding") after a few secondsdisableAutomaticTermination/disableSuddenTerminationto prevent macOS from killing this windowless menu bar appFixes #119
Explanation
In a Cocoa app, the main run loop is already running via
[NSApp run]. CallingCFRunLoopRun()insideapplicationDidFinishLaunching:creates a nested run loop that blocksNSApplicationfrom processing UI events. The fix is to only add/remove the event tap source — the existing main run loop picks it up automatically.🤖 Generated with Claude Code