Content
Found a crash in Impactor 2.6.1 (macOS 15.7.7, arm64)
repro: click Add Tweak → while the file picker is open, drag a file onto it → abort
it's the blocking rfd. package.rs calls rfd::FileDialog::new()...pick_files()
straight inside Iced's update(), 4 spots:
156 AddTweak
171 AddBundle
198 SetCustomIcon
218 SetCustomEntitlements
that blocks the event loop inside -[NSSavePanel runModal]. AppKit spins a nested
runloop for the modal, a drag comes in via NSCoreDragTrackingProc and dispatches
back into the app while update() is still on the stack → re-entry → panic → abort.
crash log matches frame for frame:
39 -[NSSavePanel runModal]
21 NSCoreDragTrackingProc
19 -[NSRunLoop runMode:beforeDate:]
15 CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK
2 abort
fix is already in the repo — subscriptions.rs:461 uses rfd::AsyncFileDialog with
.await. those 4 just need Task::perform instead of blocking + Task::none().
side note, probably same root cause: the Tweaks section has no drop target, only
- Add Tweak. if drops worked there nobody'd be dragging onto a modal picker.
Content
Found a crash in Impactor 2.6.1 (macOS 15.7.7, arm64)
repro: click Add Tweak → while the file picker is open, drag a file onto it → abort
it's the blocking rfd. package.rs calls rfd::FileDialog::new()...pick_files()
straight inside Iced's update(), 4 spots:
156 AddTweak
171 AddBundle
198 SetCustomIcon
218 SetCustomEntitlements
that blocks the event loop inside -[NSSavePanel runModal]. AppKit spins a nested
runloop for the modal, a drag comes in via NSCoreDragTrackingProc and dispatches
back into the app while update() is still on the stack → re-entry → panic → abort.
crash log matches frame for frame:
39 -[NSSavePanel runModal]
21 NSCoreDragTrackingProc
19 -[NSRunLoop runMode:beforeDate:]
15 CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK
2 abort
fix is already in the repo — subscriptions.rs:461 uses rfd::AsyncFileDialog with
.await. those 4 just need Task::perform instead of blocking + Task::none().
side note, probably same root cause: the Tweaks section has no drop target, only