fix(watch-service): remove watcher when it gets closed due to directory removal #1187
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.
Fixes #1186
On Windows deleting watched directory is firing event
errorwhich is caught byNodeWatchService.ensureWatcher:this in turn causes 2 effects:
watcher.close();in theonWatchErroronPathEvent)this.fsWatchers.delete(path);in theemitEventmethod.If
unwatchAllPathswas invoked between these 2 effects we would enter a state whenunwatchAllPathscan't finish.This happened due to
unwatchAllPathsassumes that allthis.fsWatchersare not closedunwatchAllPathsinvokescloseon each watcher and waits for thecloseevent on all of watchersBut this can't work because
watcher.close();was called in theonWatchError, so we are left with a method which can't end.The proposed fix is to remove watcher from
this.fsWatchersinside theonWatchErrorimmediately after watcher is closed.