From 08facf185abf6f0873d5ad0c13189e63a93a3e37 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Tue, 30 Jan 2018 12:34:39 -0800 Subject: [PATCH] Be less conservative when watching file system during a restart state Only go back to an error state if we have a buffer overflow --- .../DirectoryChangeWatcher.RestartingState.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Core/Files/DirectoryChangeWatcher.RestartingState.cs b/src/Core/Files/DirectoryChangeWatcher.RestartingState.cs index b81b333c..43f68b60 100644 --- a/src/Core/Files/DirectoryChangeWatcher.RestartingState.cs +++ b/src/Core/Files/DirectoryChangeWatcher.RestartingState.cs @@ -9,6 +9,7 @@ namespace VsChromium.Core.Files { public partial class DirectoryChangeWatcher { private class RestartingState : State { + private static readonly bool _conservative = false; /// /// The date/time when we restarted watching files, but still observing disk activity before /// resuming notifications. @@ -49,31 +50,37 @@ public override State OnPolling() { } public override State OnWatcherErrorEvent(object sender, ErrorEventArgs args) { + // If there is another buffer overflow, go straight back to the error state, + // don't ever be conservative. return BackToErrorState(); } public override State OnWatcherFileChangedEvent(object sender, FileSystemEventArgs args, PathKind pathKind) { - return BackToErrorState(); + return BackToState(); } public override State OnWatcherFileCreatedEvent(object sender, FileSystemEventArgs args, PathKind pathKind) { - return BackToErrorState(); + return BackToState(); } public override State OnWatcherFileDeletedEvent(object sender, FileSystemEventArgs args, PathKind pathKind) { - return BackToErrorState(); + return BackToState(); } public override State OnWatcherFileRenamedEvent(object sender, RenamedEventArgs args, PathKind pathKind) { - return BackToErrorState(); + return BackToState(); } public override State OnWatcherAdded(FullPath directory, DirectoryWatcherhEntry watcher) { - return BackToErrorState(); + return BackToState(); } public override State OnWatcherRemoved(FullPath directory, DirectoryWatcherhEntry watcher) { - return BackToErrorState(); + return BackToState(); + } + + private State BackToState() { + return _conservative ? BackToErrorState() : this; } private State BackToErrorState() {