Fix CPU/GPU usage in file dialog and crash with single-commit repos#75
Open
marcoxyz123 wants to merge 2 commits intogit-bahn:masterfrom
Open
Fix CPU/GPU usage in file dialog and crash with single-commit repos#75marcoxyz123 wants to merge 2 commits intogit-bahn:masterfrom
marcoxyz123 wants to merge 2 commits intogit-bahn:masterfrom
Conversation
The event loop ignored Event::Update when showing the file dialog, causing next_repo_refresh to never be updated after expiration. This resulted in poll() returning immediately with zero timeout, creating a busy loop. Changed if-let to match statements that handle both Event::Input and Event::Update, updating the refresh timer in both branches.
Multiple places used len() - 1 which causes unsigned integer underflow when length is 0, wrapping to usize::MAX. This caused invalid comparisons in bounds checks and subsequent out-of-bounds index access. Changes: - Added guard for empty indices in graph_view render function - Changed len() - 1 to len().saturating_sub(1) throughout - Used safe .get(idx).copied() instead of direct indexing - Pre-computed max index values to avoid repeated calculations
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
This PR fixes two bugs:
Bug 1: 100% CPU/GPU usage in file dialog view
Event::Updatewhen showing the file dialog, causingnext_repo_refreshto never update after expiration. This resulted inpoll()returning immediately with zero timeout, creating a busy loop.if let Event::Inputtomatchstatements that handle bothEvent::InputandEvent::Update, updating the refresh timer in both branches.Bug 2: Crash with single-commit repositories
len() - 1which causes unsigned integer underflow when length is 0 (wraps tousize::MAX). This caused invalid comparisons and out-of-bounds index access.indicesin graph_view render functionlen() - 1tolen().saturating_sub(1)throughout.get(idx).copied()instead of direct indexingTesting
cargo fmt --all -- --checkpassescargo clippy --all --all-targets -- --deny warningspassescargo test --allpasses