Random freezing #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
When I search for something, sometimes the window freezes and the only way to fix it is to exit and open again
Investigated on 2026-08-06. Traced the full search path (
main()→run_ui()→search.connect_changed()→fuzzy_matches()/fuzzy_score(), plusbreadbox-shared's desktop-entry/icon-cache/config loading andbreadbox-sync's manifest writer) and found no blocking I/O, locks, channels, or threads anywhere in the codebase — it's entirely single-threaded on the GTK main loop, and every function in the search/filter/sort path is bounded, in-memory, and non-blocking.breadbox-syncis a fully offline batch tool, not something breadbox talks to at runtime, and it writesmanifest.jsonatomically (tmp file + rename), so there's no race there either.No definitive root cause found, so no fix was made — didn't want to guess-patch something unrelated. Two ranked hypotheses, neither implemented:
window.set_keyboard_mode(KeyboardMode::Exclusive)is a known trouble spot for some compositors: the window can stop receiving keystrokes on reopen while the process itself is fine (matches "only fix is quit and reopen"). This would be a compositor interaction, not fixable purely in breadbox's code.to_lowercase()allocations, which could read as a stutter under load but wouldn't explain an indefinite freeze.To narrow this down: when it freezes, does the window disappear/stop rendering entirely, or does it stay visible but just stop responding to keystrokes? That would help distinguish (1) from an actual process hang.
User confirms: window stays visible, just stops responding to keystrokes when it freezes.
This is consistent with hypothesis 1 (keyboard-grab/compositor issue) but doesn't fully rule out a true main-loop hang, since a frozen GTK main loop would also just leave the last-rendered frame on screen (Wayland surfaces are client-painted, so "visible" alone doesn't prove the loop is still running).
Next time it happens, a couple of cheap checks would disambiguate:
ps -o pid,stat,%cpu -C breadboxduring the freeze —S/Dstate with near-0% CPU means it's blocked waiting on something (I/O or a lock); a busyRstate pegged at 100% means it's spinning, which would point at something like a runaway match/sort loop instead.Leaving this here for whenever it's caught in the act again.