fix(markdown): prevent compare editor freezes and lost refreshes - #2217
Merged
sebthom merged 2 commits intoSep 9, 2026
Merged
Conversation
Move marker updates and cleanup into serialized workspace jobs. Preserve buffer-session boundaries and pending server invalidations. Add regression coverage for marker lifecycle and refresh completion.
sebthom
merged commit Sep 9, 2026
760f2ab
into
eclipse-wildwebdeveloper:master
11 of 13 checks passed
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.
Problem
Opening a Markdown comparison can freeze Eclipse when an existing compare editor replaces its input.
Disposing the old viewer disconnects its shared file buffer on the UI thread.
The Markdown buffer-disposal listener then deletes problem markers synchronously.
If another workspace operation holds the required lock, the UI waits for that operation to finish.
Two thread dumps taken about 30 seconds apart captured the same UI wait.
Changes
A shared job group serializes this work even when the workspace supplies no marker scheduling rule.
Buffer disposal can return without waiting for marker writes.
Delayed cleanup cannot erase markers from a reopened buffer, and late responses from an old session are ignored.
A reopened buffer can start diagnostics while an old request is still pending.
Server invalidations received during an active refresh retain one follow-up pull.
Opportunistic parser requests remain suppressed because they can originate from the diagnostic request itself.
For unopened files, use a private buffer manager so temporary reads do not trigger shared-buffer disposal and delete markers.