diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/LineStatusTrackerManager.kt b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/LineStatusTrackerManager.kt index 90f5fd3f7c5e..2fc28a0c2313 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/LineStatusTrackerManager.kt +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/LineStatusTrackerManager.kt @@ -153,7 +153,7 @@ class LineStatusTrackerManager( } trackers.clear() - loader.clear() + loader.dispose() } } @@ -477,7 +477,7 @@ class LineStatusTrackerManager( } } - private inner class MyBaseRevisionLoader() : SingleThreadLoader(project) { + private inner class MyBaseRevisionLoader : SingleThreadLoader() { override fun loadRequest(request: RefreshRequest): Result { if (isDisposed) return Result.Canceled() val document = request.document @@ -965,7 +965,7 @@ class LineStatusTrackerManager( * - Allows to check whether request is scheduled or is waiting for completion. * - Notifies callbacks when queue is exhausted. */ -private abstract class SingleThreadLoader(private val project: Project) { +private abstract class SingleThreadLoader { private val LOG = Logger.getInstance(SingleThreadLoader::class.java) private val LOCK: Any = Any() @@ -977,6 +977,7 @@ private abstract class SingleThreadLoader(private val project: Proje private val callbacksWaitingUpdateCompletion = ArrayList() private var isScheduled: Boolean = false + private var isDisposed: Boolean = false @CalledInBackground @@ -988,7 +989,7 @@ private abstract class SingleThreadLoader(private val project: Proje @CalledInAwt fun scheduleRefresh(request: Request) { - if (isDisposed()) return + if (isDisposed) return synchronized(LOCK) { if (taskQueue.contains(request)) return @@ -999,9 +1000,10 @@ private abstract class SingleThreadLoader(private val project: Proje } @CalledInAwt - fun clear() { + fun dispose() { val callbacks = mutableListOf() synchronized(LOCK) { + isDisposed = true taskQueue.clear() waitingForRefresh.clear() @@ -1047,7 +1049,7 @@ private abstract class SingleThreadLoader(private val project: Proje private fun schedule() { - if (isDisposed()) return + if (isDisposed) return synchronized(LOCK) { if (isScheduled) return @@ -1065,7 +1067,7 @@ private abstract class SingleThreadLoader(private val project: Proje val request = synchronized(LOCK) { val request = taskQueue.poll() - if (isDisposed() || request == null) { + if (isDisposed || request == null) { isScheduled = false return } @@ -1099,7 +1101,7 @@ private abstract class SingleThreadLoader(private val project: Proje @CalledInAwt private fun notifyTrackerRefreshed(request: Request) { - if (isDisposed()) return + if (isDisposed) return val callbacks = mutableListOf() synchronized(LOCK) { @@ -1125,8 +1127,6 @@ private abstract class SingleThreadLoader(private val project: Proje } } } - - private fun isDisposed() = project.isDisposed } private sealed class Result {