mirror of https://github.com/sbt/sbt.git
In some circumstances, sbt would generate a number of task progress threads that could run concurrently. The issue was that the TaskProgress could be shared by multiple EvaluateTaskConfigs if a dynamic task was used. This was problematic because when a dynamic task completed, it might call afterAllCompleted which would stop the progress thread. There also was a race condition because multiple threads calling initial could theoretically have created a new progress thread which would cause a resource leak. To fix this, we modify the shared task progress so that the `stop()` method is a no-op. This should prevent dynamic tasks from stopping the progress thread. We also defer the creation of the task thread until there is at least one active task. This prevents a thread from being created in the shell. The motivation for this change was that I found that sometimes there was a leaked progress thread that would make the shell not really work for me because the progress thread would overwrite the shell prompt. This change fixes that behavior and I was able to validate with jstack that there was consistently either one or zero task progress threads at a time (zero in the shell, one when tasks were actually running). |
||
|---|---|---|
| .. | ||
| src/main/scala/sbt | ||
| NOTICE | ||