facebookarchive / network-connection-class

Listen to current network traffic in the app and categorize the quality of the network.
Other
3.19k stars 515 forks source link

IndexOutOfBoundsException in ConnectionClassManager #29

Open lukaville opened 7 years ago

lukaville commented 7 years ago

ConnectionClassManager sometimes throws IndexOutOfBoundException here: https://github.com/facebook/network-connection-class/blob/master/connectionclass/src/main/java/com/facebook/network/connectionclass/ConnectionClassManager.java#L245

Access to mListenerList is not synchronized and it is accessed from at least two different threads: ParseThread handler thread and thread where register/remove listener methods called (usually main thread).

This sometimes causes crashes:

Fatal Exception: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
       at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
       at java.util.ArrayList.get(ArrayList.java:308)
       at com.facebook.network.connectionclass.ConnectionClassManager.notifyListeners(ConnectionClassManager.java:1205)
       at com.facebook.network.connectionclass.DeviceBandwidthSampler$SamplingHandler.addSample(DeviceBandwidthSampler.java:121)
       at com.facebook.network.connectionclass.DeviceBandwidthSampler$SamplingHandler.handleMessage(DeviceBandwidthSampler.java:100)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:136)
       at android.os.HandlerThread.run(HandlerThread.java:61)