Fixed
Status Update
Comments
su...@google.com <su...@google.com>
su...@google.com <su...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-main
commit 428f0ec685ff80035c0511c0cdb12b9770b6159c
Author: Maxim Savoskin <maximsavoskin@gmail.com>
Date: Mon Mar 29 13:20:52 2021
[GH] [Lifecycle] [Lint] fixes b/183696616 : KtCallExpression is not always the first in the list
## Proposed Changes
KtCallExpression is not always the first in the list. In this case, it is KtModifierList.
## Testing
Test: ./gradlew test lint buildOnServer
## Issues Fixed
Fixes:https://issuetracker.google.com/issues/183696616
This is an imported pull request fromhttps://github.com/androidx/androidx/pull/147 .
Resolves #147
Github-Pr-Head-Sha: 3c2693e2f4cceb367c9c169749d1391a9da2740f
GitOrigin-RevId: a6440720029b1c0c702207f1393d3b01180691b8
Change-Id: I9b4383329b9ece85e3bffa4a9bf8e8a3f0c3d84a
M lifecycle/lifecycle-livedata-core-ktx-lint/src/main/java/androidx/lifecycle/lint/NonNullableMutableLiveDataDetector.kt
M lifecycle/lifecycle-livedata-core-ktx-lint/src/test/java/androidx/lifecycle/lint/NonNullableMutableLiveDataDetectorTest.kt
https://android-review.googlesource.com/1656820
Branch: androidx-main
commit 428f0ec685ff80035c0511c0cdb12b9770b6159c
Author: Maxim Savoskin <maximsavoskin@gmail.com>
Date: Mon Mar 29 13:20:52 2021
[GH] [Lifecycle] [Lint] fixes
## Proposed Changes
KtCallExpression is not always the first in the list. In this case, it is KtModifierList.
## Testing
Test: ./gradlew test lint buildOnServer
## Issues Fixed
Fixes:
This is an imported pull request from
Resolves #147
Github-Pr-Head-Sha: 3c2693e2f4cceb367c9c169749d1391a9da2740f
GitOrigin-RevId: a6440720029b1c0c702207f1393d3b01180691b8
Change-Id: I9b4383329b9ece85e3bffa4a9bf8e8a3f0c3d84a
M lifecycle/lifecycle-livedata-core-ktx-lint/src/main/java/androidx/lifecycle/lint/NonNullableMutableLiveDataDetector.kt
M lifecycle/lifecycle-livedata-core-ktx-lint/src/test/java/androidx/lifecycle/lint/NonNullableMutableLiveDataDetectorTest.kt
Description
Version used: 1.0.0-alpha06
Devices/Android versions reproduced on: Many
We can see a large number of ConcurrentModificationExceptions in WorkManager:
java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 bqHint=4 (has extras) } in vu@2406837b
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:988)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:7007)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:366)
at androidx.work.impl.constraints.trackers.ConstraintTracker.setState(OperaSrc:89)
at androidx.work.impl.constraints.trackers.NetworkStateTracker$NetworkStateBroadcastReceiver.onReceive(OperaSrc:157)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:978)
It looks like the mListeners set is being modified during the loop in ConstraintTracker.setState(). I see two potential issues with this method:
1. Maybe a listener is added or removed in onConstraintChanged(). I haven't seen this happen, but it might be good to make a copy of mListeners and iterate over the copy.
2. The NetworkStateTracker.mNetworkCallback is called on a different thread than the main thread. In consequence setState() is called on a different thread so there is a possibility that the main thread adds or removes a listener. This cannot be the (only) reason because the error happens in response to the CONNECTIVITY_CHANGE.
This may be fixed with synchronization or by registering mNetworkCallback to run on the main thread.