forked from GitHub-Mirror/riotX-android
Sync: use a single threaded executor to ensure we have only one sync at a time
This commit is contained in:
parent
ddf4a81905
commit
b8669d5ed2
@ -19,4 +19,4 @@ package im.vector.matrix.android
|
|||||||
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
|
|
||||||
internal val testCoroutineDispatchers = MatrixCoroutineDispatchers(Main, Main, Main, Main)
|
internal val testCoroutineDispatchers = MatrixCoroutineDispatchers(Main, Main, Main, Main, Main)
|
@ -18,15 +18,15 @@ package im.vector.matrix.android.internal.di
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.Handler
|
|
||||||
import android.os.HandlerThread
|
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
||||||
import im.vector.matrix.android.internal.util.createBackgroundHandler
|
import im.vector.matrix.android.internal.util.createBackgroundHandler
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.android.asCoroutineDispatcher
|
import kotlinx.coroutines.android.asCoroutineDispatcher
|
||||||
|
import kotlinx.coroutines.asCoroutineDispatcher
|
||||||
import org.matrix.olm.OlmManager
|
import org.matrix.olm.OlmManager
|
||||||
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal object MatrixModule {
|
internal object MatrixModule {
|
||||||
@ -38,7 +38,8 @@ internal object MatrixModule {
|
|||||||
return MatrixCoroutineDispatchers(io = Dispatchers.IO,
|
return MatrixCoroutineDispatchers(io = Dispatchers.IO,
|
||||||
computation = Dispatchers.IO,
|
computation = Dispatchers.IO,
|
||||||
main = Dispatchers.Main,
|
main = Dispatchers.Main,
|
||||||
crypto = createBackgroundHandler("Crypto_Thread").asCoroutineDispatcher()
|
crypto = createBackgroundHandler("Crypto_Thread").asCoroutineDispatcher(),
|
||||||
|
sync = Executors.newSingleThreadExecutor().asCoroutineDispatcher()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,8 +105,8 @@ open class SyncService : Service() {
|
|||||||
Timber.v("Execute sync request with timeout 0")
|
Timber.v("Execute sync request with timeout 0")
|
||||||
val params = SyncTask.Params(TIME_OUT)
|
val params = SyncTask.Params(TIME_OUT)
|
||||||
cancelableTask = syncTask.configureWith(params)
|
cancelableTask = syncTask.configureWith(params)
|
||||||
.callbackOn(TaskThread.CALLER)
|
.callbackOn(TaskThread.SYNC)
|
||||||
.executeOn(TaskThread.CALLER)
|
.executeOn(TaskThread.SYNC)
|
||||||
.dispatchTo(object : MatrixCallback<Unit> {
|
.dispatchTo(object : MatrixCallback<Unit> {
|
||||||
override fun onSuccess(data: Unit) {
|
override fun onSuccess(data: Unit) {
|
||||||
cancelableTask = null
|
cancelableTask = null
|
||||||
|
@ -97,8 +97,8 @@ internal class SyncThread @Inject constructor(private val syncTask: SyncTask,
|
|||||||
val latch = CountDownLatch(1)
|
val latch = CountDownLatch(1)
|
||||||
val params = SyncTask.Params(DEFAULT_LONG_POOL_TIMEOUT)
|
val params = SyncTask.Params(DEFAULT_LONG_POOL_TIMEOUT)
|
||||||
cancelableTask = syncTask.configureWith(params)
|
cancelableTask = syncTask.configureWith(params)
|
||||||
.callbackOn(TaskThread.CALLER)
|
.callbackOn(TaskThread.SYNC)
|
||||||
.executeOn(TaskThread.CALLER)
|
.executeOn(TaskThread.SYNC)
|
||||||
.dispatchTo(object : MatrixCallback<Unit> {
|
.dispatchTo(object : MatrixCallback<Unit> {
|
||||||
override fun onSuccess(data: Unit) {
|
override fun onSuccess(data: Unit) {
|
||||||
latch.countDown()
|
latch.countDown()
|
||||||
|
@ -62,8 +62,8 @@ internal class SyncWorker(context: Context,
|
|||||||
val latch = CountDownLatch(1)
|
val latch = CountDownLatch(1)
|
||||||
val taskParams = SyncTask.Params(0)
|
val taskParams = SyncTask.Params(0)
|
||||||
cancelableTask = syncTask.configureWith(taskParams)
|
cancelableTask = syncTask.configureWith(taskParams)
|
||||||
.callbackOn(TaskThread.CALLER)
|
.callbackOn(TaskThread.SYNC)
|
||||||
.executeOn(TaskThread.CALLER)
|
.executeOn(TaskThread.SYNC)
|
||||||
.dispatchTo(object : MatrixCallback<Unit> {
|
.dispatchTo(object : MatrixCallback<Unit> {
|
||||||
override fun onSuccess(data: Unit) {
|
override fun onSuccess(data: Unit) {
|
||||||
latch.countDown()
|
latch.countDown()
|
||||||
|
@ -77,6 +77,7 @@ internal class TaskExecutor @Inject constructor(private val coroutineDispatchers
|
|||||||
TaskThread.IO -> coroutineDispatchers.io
|
TaskThread.IO -> coroutineDispatchers.io
|
||||||
TaskThread.CALLER -> EmptyCoroutineContext
|
TaskThread.CALLER -> EmptyCoroutineContext
|
||||||
TaskThread.CRYPTO -> coroutineDispatchers.crypto
|
TaskThread.CRYPTO -> coroutineDispatchers.crypto
|
||||||
|
TaskThread.SYNC -> coroutineDispatchers.sync
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,5 +21,6 @@ internal enum class TaskThread {
|
|||||||
COMPUTATION,
|
COMPUTATION,
|
||||||
IO,
|
IO,
|
||||||
CALLER,
|
CALLER,
|
||||||
CRYPTO
|
CRYPTO,
|
||||||
|
SYNC
|
||||||
}
|
}
|
@ -22,5 +22,6 @@ internal data class MatrixCoroutineDispatchers(
|
|||||||
val io: CoroutineDispatcher,
|
val io: CoroutineDispatcher,
|
||||||
val computation: CoroutineDispatcher,
|
val computation: CoroutineDispatcher,
|
||||||
val main: CoroutineDispatcher,
|
val main: CoroutineDispatcher,
|
||||||
val crypto: CoroutineDispatcher
|
val crypto: CoroutineDispatcher,
|
||||||
|
val sync: CoroutineDispatcher
|
||||||
)
|
)
|
Loading…
Reference in New Issue
Block a user