Merge pull request #5728 from eatkins/observer-memory-leak

Close file tree repository registrations
This commit is contained in:
eugene yokota 2020-08-07 18:29:16 -04:00 committed by GitHub
commit 9beecf98e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 6 additions and 5 deletions

View File

@ -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)

View File

@ -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))
}
}

View File

@ -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)