Fix race condition in concurrent slidev export#2461
Merged
Conversation
✅ Deploy Preview for slidev ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
moreal
marked this pull request as ready for review
February 21, 2026 10:20
@slidev/client
create-slidev
create-slidev-theme
@slidev/parser
@slidev/cli
@slidev/types
commit: |
kermanx
approved these changes
Feb 24, 2026
kermanx
left a comment
Member
There was a problem hiding this comment.
Thank you for the fix~
I removed the tests since they’re a bit hard to maintain.
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
slidev exportruns a Vite server, then uses a headless browser to capture slides.Under concurrent runs, the CLI could pass a candidate port to export logic instead of the actual bound port. If Vite moved to another port, the browser could connect to the wrong server.
In practice, one export command could render slides that belonged to another concurrent export target.
The error string below was from the regression test script, which detected that mismatch by checking output counts:
Unexpected PNG count in export-concurrency-b: expected 9, got 8How to test
bash scripts/test-export-concurrency-loop-until-failure.sh ../temp/slidev-project # optional second arg: max runsThe integration test creates two decks (8 and 9 slides), runs two
slidev export --format pngprocesses in parallel, and verifies each output directory has the expected PNG count.Fix
In
slidev exportandexport-notes, resolve and use the actual Vite listening port instead of assuming the candidate port.This prevents concurrent exports from rendering another command's slides and makes server cleanup deterministic.