diff --git a/main/src/main/scala/sbt/internal/Continuous.scala b/main/src/main/scala/sbt/internal/Continuous.scala index cd6682433..39420a1fa 100644 --- a/main/src/main/scala/sbt/internal/Continuous.scala +++ b/main/src/main/scala/sbt/internal/Continuous.scala @@ -178,7 +178,7 @@ private[sbt] object Continuous extends DeprecatedContinuous { val repository = getRepository(state) dynamicInputs ++= inputs logger.debug(s"[watch] [${scopedKey.show}] Found inputs: ${inputs.map(_.glob).mkString(",")}") - inputs.foreach(i => repository.register(i.glob)) + inputs.foreach(i => repository.register(i.glob).foreach(_.close())) val watchSettings = new WatchSettings(scopedKey) new Config( scopedKey.show, @@ -462,7 +462,7 @@ private[sbt] object Continuous extends DeprecatedContinuous { if (trackMetaBuild) { state.get(CheckBuildSources.CheckBuildSourcesKey).flatMap(_.fileTreeRepository) match { case Some(r) => buildGlobs.foreach(r.register(_).foreach(observers.addObservable)) - case _ => buildGlobs.foreach(repo.register) + case _ => buildGlobs.foreach(repo.register(_).foreach(_.close())) } } @@ -505,6 +505,7 @@ private[sbt] object Continuous extends DeprecatedContinuous { override def close(): Unit = { configHandle.close() handles.forEach(_.close()) + observers.close() } } val watchLogger: WatchLogger = msg => logger.debug(msg.toString) diff --git a/main/src/main/scala/sbt/internal/nio/CheckBuildSources.scala b/main/src/main/scala/sbt/internal/nio/CheckBuildSources.scala index 0bd9ad1fc..95e64d22b 100644 --- a/main/src/main/scala/sbt/internal/nio/CheckBuildSources.scala +++ b/main/src/main/scala/sbt/internal/nio/CheckBuildSources.scala @@ -75,13 +75,13 @@ private[sbt] class CheckBuildSources extends AutoCloseable { val repo = FileTreeRepository.default repo.addObserver(_ => needUpdate.set(true)) repository.set(repo) - newSources.foreach(g => repo.register(g)) + newSources.foreach(g => repo.register(g).foreach(_.close())) case r => } } val previousSources = sources.getAndSet(newSources) if (previousSources != newSources) { - fileTreeRepository.foreach(r => newSources.foreach(g => r.register(g))) + fileTreeRepository.foreach(r => newSources.foreach(g => r.register(g).foreach(_.close()))) previousStamps.set(getStamps(force = true)) } } diff --git a/main/src/main/scala/sbt/nio/Settings.scala b/main/src/main/scala/sbt/nio/Settings.scala index 8514a6d29..f0e5f139d 100644 --- a/main/src/main/scala/sbt/nio/Settings.scala +++ b/main/src/main/scala/sbt/nio/Settings.scala @@ -149,7 +149,7 @@ private[sbt] object Settings { // This makes watch work by ensuring that the input glob is registered with the // repository used by the watch process. state.value.get(globalFileTreeRepository).foreach { repo => - inputs.foreach(repo.register) + inputs.foreach(repo.register(_).foreach(_.close())) } dynamicInputs.foreach(_ ++= inputs.map(g => DynamicInput(g, stamper, forceTrigger))) view.list(inputs)