[ 
https://issues.apache.org/jira/browse/CB-10692?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dan Polivy updated CB-10692:
----------------------------
    Description: 
On Android, there is a small race condition in the code to hide the splash 
screen when a fade out is used. It may only be visible in certain edge cases, 
but the net result is that the app will crash.

Specifically, if multiple calls come in to {{removeSplashScreen}} in a row, 
it's possible for the first call to null out {{splashImageView}} before the 
second call uses it (but after the second call tests for {{splashDialog == 
null}}), because of the animation delay.

Crashing code: 
https://github.com/apache/cordova-plugin-splashscreen/blob/master/src/android/SplashScreen.java#L219

My repro for this scenario is due to having a native dialog box that appears if 
we have a network connection error when trying to connect to the starting URL 
(in my case, it is a remote URL). The dialog box has a 'retry' button which 
allows the user to retry the network request. When the user does this, we tell 
the webview to load a new URL; the webview then re-initializes the plugin 
manager, which in turn sends onPause and onDestroy events to the Splash Screen 
plugin. It's this sequence of events, which, in quick succession, can trigger 
the crash.

  was:
On Android, there is a small race condition in the code to hide the splash 
screen when a fade out is used. It may only be visible in certain edge cases, 
but the net result is that the app will crash.

Specifically, if multiple calls come in to {{removeSplashScreen}} in a row, 
it's possible for the first call to null out {{splashImageView}} before the 
second call uses it (but after the second call tests for {{splashDialog == 
null}}), because of the animation delay.

Crashing code: 
https://github.com/apache/cordova-plugin-splashscreen/blob/master/src/android/SplashScreen.java#L219

The easiest fix is likely to protect this will a null check prior to using it.


> [Android] SplashScreen plugin crashes due to race condition on hide
> -------------------------------------------------------------------
>
>                 Key: CB-10692
>                 URL: https://issues.apache.org/jira/browse/CB-10692
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Plugin SplashScreen
>    Affects Versions: 3.2.0
>            Reporter: Dan Polivy
>
> On Android, there is a small race condition in the code to hide the splash 
> screen when a fade out is used. It may only be visible in certain edge cases, 
> but the net result is that the app will crash.
> Specifically, if multiple calls come in to {{removeSplashScreen}} in a row, 
> it's possible for the first call to null out {{splashImageView}} before the 
> second call uses it (but after the second call tests for {{splashDialog == 
> null}}), because of the animation delay.
> Crashing code: 
> https://github.com/apache/cordova-plugin-splashscreen/blob/master/src/android/SplashScreen.java#L219
> My repro for this scenario is due to having a native dialog box that appears 
> if we have a network connection error when trying to connect to the starting 
> URL (in my case, it is a remote URL). The dialog box has a 'retry' button 
> which allows the user to retry the network request. When the user does this, 
> we tell the webview to load a new URL; the webview then re-initializes the 
> plugin manager, which in turn sends onPause and onDestroy events to the 
> Splash Screen plugin. It's this sequence of events, which, in quick 
> succession, can trigger the crash.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to