Fix bug when wifi locks are acquired and released quickly
There is a race condition when handling wifi locks. If you grab one and release it quickly after, there is a chance the check for size > 0 will pass, yet the element will disappear before the .get() call completes causing a IndexOutOfBoundsException. Adding a try-catch block should fix this. D/WifiService( 7476): releaseWifiLockLocked: WifiLock{streamingWifiLock type=1 binder=android.os.BinderProxy@40f66690} D/WifiService( 7476): acquireWifiLockLocked: WifiLock{streamingWifiLock type=1 binder=android.os.BinderProxy@40f66690} W/QueueService(14261): onError callback for player error: OFFLINE_AND_NO_FILE D/WifiService( 7476): releaseWifiLockLocked: WifiLock{streamingWifiLock type=1 binder=android.os.BinderProxy@40f66690} W/d(3) (14261): caught br preparing async: null D/WifiService( 7476): acquireWifiLockLocked: WifiLock{streamingWifiLock type=1 binder=android.os.BinderProxy@40f66690} W/dalvikvm( 7476): threadid=28: thread exiting with uncaught exception (group=0x40015560) W/QueueService(14261): onError callback for player error: OFFLINE_AND_NO_FILE D/WifiService( 7476): releaseWifiLockLocked: WifiLock{streamingWifiLock type=1 binder=android.os.BinderProxy@40f66690} E/AndroidRuntime( 7476): *** FATAL EXCEPTION IN SYSTEM PROCESS: WifiService E/AndroidRuntime( 7476): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 E/AndroidRuntime( 7476): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) E/AndroidRuntime( 7476): at java.util.ArrayList.get(ArrayList.java:311) E/AndroidRuntime( 7476): at com.android.server.WifiService.reportStartWorkSource(WifiService.java:2013) E/AndroidRuntime( 7476): at com.android.server.WifiService.access$2300(WifiService.java:106) E/AndroidRuntime( 7476): at com.android.server.WifiService$WifiHandler.handleMessage(WifiService.java:2209) E/AndroidRuntime( 7476): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime( 7476): at android.os.Looper.loop(Looper.java:130) E/AndroidRuntime( 7476): at android.os.HandlerThread.run(HandlerThread.java:60) W/d(3) (14261): caught br preparing async: null W/QueueService(14261): onError callback for player error: OFFLINE_AND_NO_FILE I/Process ( 7476): Sending signal. PID: 7476 SIG: 9 D/WifiService( 7476): acquireWifiLockLocked: WifiLock{streamingWifiLock type=1 binder=android.os.BinderProxy@40f66690} D/WifiService( 7476): releaseWifiLockLocked: WifiLock{streamingWifiLock type=1 binder=android.os.BinderProxy@40f66690} Change-Id: I5094baea00b0723b27b0e8032e078a9800a4ab3a
Loading
Please register or sign in to comment