diff options
Diffstat (limited to 'android/src')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt index 7be0668f61..51109e6f2d 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt @@ -8,6 +8,7 @@ import kotlinx.coroutines.launch class JobTracker { private val jobs = HashMap<Long, Job>() + private val reaperJobs = HashMap<Long, Job>() private val namedJobs = HashMap<String, Long>() private var jobIdCounter = 0L @@ -18,7 +19,9 @@ class JobTracker { jobIdCounter += 1 - jobs.put(jobId, GlobalScope.launch(Dispatchers.Default) { + jobs.put(jobId, job) + + reaperJobs.put(jobId, GlobalScope.launch(Dispatchers.Default) { job.join() synchronized(jobs) { @@ -69,6 +72,7 @@ class JobTracker { fun cancelJob(jobId: Long) { synchronized(jobs) { jobs.remove(jobId)?.cancel() + reaperJobs.remove(jobId)?.cancel() } } @@ -78,7 +82,12 @@ class JobTracker { job.cancel() } + for (job in reaperJobs.values) { + job.cancel() + } + jobs.clear() + reaperJobs.clear() } } } |
