summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-04-30 13:22:58 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-04-30 15:33:41 +0000
commit576647202c9d398d09c42eb80a00d754c2a0dd9b (patch)
tree71a1d10efb68924586d4de5cea865b6dbe5be542 /android/src/main
parent9737bd153ecea81fe5e9c0efd41e7b0f890f8054 (diff)
downloadmullvadvpn-576647202c9d398d09c42eb80a00d754c2a0dd9b.tar.xz
mullvadvpn-576647202c9d398d09c42eb80a00d754c2a0dd9b.zip
Separate actual jobs from reaper jobs
Make sure the actual job is cancelled instead of only the reaper job.
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt11
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()
}
}
}