From 86c59d8f72b716492f021367ac572a2618af0b6b Mon Sep 17 00:00:00 2001 From: OlegYch Date: Thu, 18 Jan 2018 16:04:37 +0300 Subject: [PATCH 1/2] avoid deadlocks on spotty connections, fix https://github.com/sbt/sbt/issues/3738 --- .../librarymanagement/ivyint/ParallelResolveEngine.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) mode change 100644 => 100755 ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala old mode 100644 new mode 100755 index 4e3b4bed..326c500b --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala @@ -38,7 +38,9 @@ private[sbt] class ParallelResolveEngine(settings: ResolveEngineSettings, val allDownloads = dependencies.par.flatMap { dep => if (!(dep.isCompletelyEvicted || dep.hasProblem) && dep.getModuleRevision != null) { - ParArray(downloadNodeArtifacts(dep, artifactFilter, options)) + scala.concurrent.blocking { + ParArray(downloadNodeArtifacts(dep, artifactFilter, options)) + } } else ParArray.empty[DownloadResult] } From d267b6fda5970fb0a465579c2698605512048736 Mon Sep 17 00:00:00 2001 From: OlegYch Date: Thu, 18 Jan 2018 18:27:03 +0300 Subject: [PATCH 2/2] clarify intent --- .../librarymanagement/ivyint/ParallelResolveEngine.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala index 326c500b..f461d0cd 100755 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala @@ -38,6 +38,7 @@ private[sbt] class ParallelResolveEngine(settings: ResolveEngineSettings, val allDownloads = dependencies.par.flatMap { dep => if (!(dep.isCompletelyEvicted || dep.hasProblem) && dep.getModuleRevision != null) { + //don't block in global ec to avoid deadlocks scala.concurrent.blocking { ParArray(downloadNodeArtifacts(dep, artifactFilter, options)) }