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.
This PR supersets #18559 and fixes the same issue reported by @Gazler.
Upon testing, we noticed that it's possible that two parallel invocations of file system change events could cause some cleanup functions to get swallowed.
This happens because we only remember one global cleanup function but it is possible timing wise that two calls to
createWatcher()
are created before the old watchers are cleaned and thus only one of the new cleanup functions get retained.To fix this, this PR changes
cleanupWatchers
to an array and ensures that all functions are retained.In some local testing, I was able to trigger this, based on the reproduction by @Gazler in #18559, to often call a cleanup with more than one cleanup function in the array.
I'm going to paste the amazing reproduction from #18559 here as well:
Requirements
We need a way to stress the CPU to slow down tailwind compilation, for example stress-ng.
It can be install with apt, homebrew or similar.
Installation
There is a one-liner at the bottom to perform the required setup and run the tailwindcli.
Create a new directory:
Create a package.json with the correct deps.
Create the input css:
Install tailwind, daisyui, and some HTML to make tailwind do some work:
Usage
This is easiest with 3 terminal windows:
Start a tailwindcli watcher in one terminal:
Start a stress test in another:
Force repeated compilation in another:
Result
Once the stress test has completed, you can run:
You should see that there is repeated output, and the duration is in the multiple seconds.
If this setup doesn't cause the issue, you can also add the
-p
flag which causes theCSS to be printed, slowing things down further:
One-liner
Test plan