react-native-system-setting icon indicating copy to clipboard operation
react-native-system-setting copied to clipboard

Race condition possible in register / unregister volumeReceiver

Open imanpeeman opened this issue 5 years ago • 0 comments

When setting the volume while the volumeReceiver is unregistered, an IllegalArgumentException occurs. ' 10-07 11:56:08.957 7783 7839 E SystemSetting: error in unregisterVolumeReceiver: nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: java.lang.IllegalArgumentException: Receiver not registered: com.ninty.system.setting.SystemSetting$VolumeBroadcastReceiver@3f44bec: nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:1193): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1449): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:645): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:645): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at com.ninty.system.setting.SystemSetting.unregisterVolumeReceiver(SystemSetting.java:78): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at com.ninty.system.setting.SystemSetting.setVolume(SystemSetting.java:288): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at java.lang.reflect.Method.invoke(Native Method): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:371): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:150): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at android.os.Handler.handleCallback(Handler.java:790): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at android.os.Handler.dispatchMessage(Handler.java:99): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:26): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at android.os.Looper.loop(Looper.java:164): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:225): nl.. 10-07 11:56:08.957 7783 7839 E SystemSetting: at java.lang.Thread.run(Thread.java:764): nl.. ' It could be related to a race condition, where the receiver is being registered in the registerVolumeReciever() but (due to very quick) user action the receiver is being unregistered. these two calls / and the isRegistered option are not safe-guarded by a lock or semaphore.

imanpeeman avatar Oct 07 '20 11:10 imanpeeman