Skip to content

fix(inline): guard async render against teardown and swap races#176

Merged
dlyongemallo merged 1 commit into
mainfrom
guard_render_generation_race
May 18, 2026
Merged

fix(inline): guard async render against teardown and swap races#176
dlyongemallo merged 1 commit into
mainfrom
guard_render_generation_race

Conversation

@dlyongemallo
Copy link
Copy Markdown
Owner

No description provided.

Copilot AI review requested due to automatic review settings May 18, 2026 09:35
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR hardens the diff1_inline layout’s async inline-render pipeline against races caused by entry swaps (use_entry) and teardown (teardown_render/destroy). It introduces a monotonic “render generation” token that invalidates in-flight async work, preventing stale callbacks from overwriting caches or rendering extmarks onto buffers after the layout no longer owns them.

Changes:

  • Add _render_generation tokening plus _is_active_render() guards around async yield points in create, use_entry, _prerender, and _render_inline.
  • Bump generation on lifecycle transitions (create, use_entry, teardown_render) so stale async resumes bail out safely.
  • Add functional tests covering mid-flight generation changes, destroy/teardown during awaits, and cached-instance reuse after destroy.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
lua/diffview/scene/layouts/diff_1_inline.lua Introduces generation-based invalidation to prevent stale async renders from mutating state or leaking extmarks after swaps/teardown.
lua/diffview/tests/functional/layouts_spec.lua Adds regression tests exercising swap/teardown/destroy race scenarios and cached layout reuse.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Base automatically changed from diff1_inline_initial_display to main May 18, 2026 14:08
@dlyongemallo dlyongemallo force-pushed the guard_render_generation_race branch from c3c5e30 to ea7998a Compare May 18, 2026 14:09
@dlyongemallo dlyongemallo merged commit f88390e into main May 18, 2026
7 checks passed
@dlyongemallo dlyongemallo deleted the guard_render_generation_race branch May 18, 2026 14:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants