diff options
author | Lluis Sanchez <lluis@xamarin.com> | 2019-09-16 18:48:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-16 18:48:06 +0300 |
commit | b7bf2893f20b01603c139a1b0573a4d50c00bf80 (patch) | |
tree | fe1e7a781e4c0540c9c41cfb4a0df2bc68d67b9b /main/src/addins | |
parent | d737ffb8a720e53595866642586cf7360214ee4e (diff) | |
parent | ddf702ccbcb1646593f2008a1ad953cbe9a5f34c (diff) |
Merge pull request #8726 from mono/fix-all-hangs
Fix all hangs
Diffstat (limited to 'main/src/addins')
5 files changed, 16 insertions, 24 deletions
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/StatusView.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/StatusView.cs index 124690be2e..afbafe0e84 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/StatusView.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/StatusView.cs @@ -988,7 +988,7 @@ namespace MonoDevelop.VersionControl.Views } } - async void OnFileStatusChanged (object s, FileUpdateEventArgs args) + void OnFileStatusChanged (object s, FileUpdateEventArgs args) { try { if (args.Any (f => f.FilePath == filepath || (filepath != null && !f.FilePath.IsNullOrEmpty && f.FilePath.IsChildPathOf (filepath) && f.IsDirectory))) { @@ -996,7 +996,7 @@ namespace MonoDevelop.VersionControl.Views return; } foreach (FileUpdateEventInfo f in args) { - if (!await OnFileStatusChanged (f)) + if (!OnFileStatusChanged (f)) break; } UpdateControlStatus (); @@ -1005,7 +1005,7 @@ namespace MonoDevelop.VersionControl.Views } } - async Task<bool> OnFileStatusChanged (FileUpdateEventInfo args) + bool OnFileStatusChanged (FileUpdateEventInfo args) { if (args.FilePath.IsNullOrEmpty) return false; diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs index d96abe1cac..29ff8afe57 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs @@ -325,13 +325,13 @@ namespace MonoDevelop.VersionControl } if (pathsToQuery.Count > 0) { ExclusiveOperationFactory.StartNew (async delegate { - var status = await OnGetVersionInfoAsync (pathsToQuery, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0, cancellationToken); + var status = await OnGetVersionInfoAsync (pathsToQuery, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0, cancellationToken).ConfigureAwait (false); foreach (var vi in status) { if (!vi.IsInitialized) { - await vi.InitAsync (this, cancellationToken); + await vi.InitAsync (this, cancellationToken).ConfigureAwait (false); } } - await infoCache.SetStatusAsync (status, cancellationToken); + await infoCache.SetStatusAsync (status, cancellationToken).ConfigureAwait (false); }).Ignore (); } return result; @@ -361,13 +361,14 @@ namespace MonoDevelop.VersionControl } if (pathsToQuery.Count > 0) { ExclusiveOperationFactory.StartNew (async delegate { - var status = await OnGetVersionInfoAsync (paths, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0); + // we don't care about initialization and setstatus async to happen on the exclusive thread, as we're not running a query here. + var status = await OnGetVersionInfoAsync (paths, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0).ConfigureAwait (false); foreach (var vi in status) { if (!vi.IsInitialized) { - await vi.InitAsync (this); + await vi.InitAsync (this).ConfigureAwait (false); } } - await infoCache.SetStatusAsync (status); + await infoCache.SetStatusAsync (status).ConfigureAwait (false); }).Ignore (); } if (getVersionInfoFailed) { diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlFileSystemExtension.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlFileSystemExtension.cs index 1db9b4dd4b..c173760ee4 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlFileSystemExtension.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlFileSystemExtension.cs @@ -9,6 +9,7 @@ using System.Linq; using System; using System.Threading.Tasks; using System.Threading; +using System.IO; namespace MonoDevelop.VersionControl { @@ -132,13 +133,15 @@ namespace MonoDevelop.VersionControl FileUpdateEventArgs args = new FileUpdateEventArgs (); foreach (var file in files) { var rep = GetRepository (file); - if (rep != null && !rep.IsDisposed) { + // FIXME: Remove workaround https://devdiv.visualstudio.com/DevDiv/_workitems/edit/982818 + if (rep != null && !rep.IsDisposed && File.Exists (file)) { rep.ClearCachedVersionInfo (file); if (rep.TryGetFileUpdateEventInfo (rep, file, out var eventInfo)) args.Add (eventInfo); } } - VersionControlService.NotifyFileStatusChanged (args); + if (args.Count > 0) + VersionControlService.NotifyFileStatusChanged (args); } } } diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs index da4d6724ba..32d122ad77 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs @@ -139,18 +139,6 @@ namespace MonoDevelop.VersionControl void Monitor (object sender, FileUpdateEventArgs args) { foreach (var uinfo in args) { - if (uinfo.RepositoryChanged) { - foreach (var kv in pathToObject) { - var builder = Context.GetTreeBuilder (kv.Value); - if (kv.Value is WorkspaceObject wo) { - var rep = VersionControlService.GetRepository (wo); - rep.ClearCachedVersionInfo (kv.Key); - } - - builder?.Update (); - } - break; - } foreach (var ob in GetObjectsForPath (uinfo.FilePath)) { ITreeBuilder builder = Context.GetTreeBuilder (ob); if (builder != null) diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs index 256d3c981e..fc37ca6ed9 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs @@ -522,7 +522,7 @@ namespace MonoDevelop.VersionControl monitor = GetStatusMonitor (); var gotInfo = repo.TryGetVersionInfo (file, out var versionInfo); - if (gotInfo == false || versionInfo.CanAdd) + if (gotInfo == false || (versionInfo.Status & VersionStatus.Ignored) == 0 && versionInfo.CanAdd) await repo.AddAsync (file, false, monitor); } vargs.AddRange (repoFiles.Select (i => new FileUpdateEventInfo (repo, i.ProjectFile.FilePath, i.ProjectFile.Subtype == Subtype.Directory))); |