Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7ed1812 authored by Anton Potapov's avatar Anton Potapov
Browse files

Add critical sections to avoid ConcurrentModificationException

Flag: NONE simple fix
Fixes: 340111723
Test: passes presubmits
Change-Id: Ic49645a28f7666fa4f3a4d3c967bb9246c6ccfea
parent 7f9eba1c
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -83,26 +83,38 @@ class CommunalAppWidgetHost(
    override fun allocateAppWidgetId(): Int {
        return super.allocateAppWidgetId().also { appWidgetId ->
            backgroundScope.launch {
                synchronized(observers) {
                    observers.forEach { observer -> observer.onAllocateAppWidgetId(appWidgetId) }
                }
            }
        }
    }

    override fun deleteAppWidgetId(appWidgetId: Int) {
        super.deleteAppWidgetId(appWidgetId)
        backgroundScope.launch {
            synchronized(observers) {
                observers.forEach { observer -> observer.onDeleteAppWidgetId(appWidgetId) }
            }
        }
    }

    override fun startListening() {
        super.startListening()
        backgroundScope.launch { observers.forEach { observer -> observer.onHostStartListening() } }
        backgroundScope.launch {
            synchronized(observers) {
                observers.forEach { observer -> observer.onHostStartListening() }
            }
        }
    }

    override fun stopListening() {
        super.stopListening()
        backgroundScope.launch { observers.forEach { observer -> observer.onHostStopListening() } }
        backgroundScope.launch {
            synchronized(observers) {
                observers.forEach { observer -> observer.onHostStopListening() }
            }
        }
    }

    fun addObserver(observer: Observer) {