[ 
https://issues.apache.org/jira/browse/CB-5037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13793989#comment-13793989
 ] 

Luke Terry commented on CB-5037:
--------------------------------

[~agrieve] thanks for the quick response and fix - the code change you 
suggested works.

I am conscious that it will ignore valid delayed requests. For us, we are just 
logging so it isn't major, but for others they may perform some session 
teardown and then reload. I suppose they should be waiting for any outstanding 
callbacks before reloading anyway, but since it will explicitly ignore such 
requests I feel there should be some clear documentation around this behaviour.

> Cordova fails to fire deviceready on page reload
> ------------------------------------------------
>
>                 Key: CB-5037
>                 URL: https://issues.apache.org/jira/browse/CB-5037
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: iOS
>    Affects Versions: 3.0.0
>         Environment: iOS 5.
> Device or Network plugins (any plugin that adds itself as a dependency to the 
> deviceready event).
>            Reporter: Luke Terry
>
> Reproduction Steps:
> # Create a new cordova project for iOS
> # Add the Device and Network plugins
> # Add a logging plugin of some kind
> # Add client code that calls the logging plugin before issuing a 
> window.location.reload(). In our situation we have lots of logging happening 
> just before we do a reload.
> Expected Results:
> The application reloads, successfully invoking the deviceready event.
> Actual Results:
> The application reloads but is stopped waiting for deviceready.
> Cause:
> Race condition on request ID reset.
> Let the first instance of cordova be instanceA and the second instance of 
> cordova be instanceB.
> # instanceA issues commands that are queued to be handled by the native 
> bridge.
> # instanceA reloads the page.
> # The native bridge handles webViewDidStartLoad and resets the largest 
> request ID to 0.
> # The native bridge continues to process the large queue from instanceA 
> incrementing the largest request ID to X (perhaps the XHR request has come in 
> after the webViewDidStartLoad is handled?)
> # instanceB starts up,
> # The Device plugin for instanceB tries to getDeviceInfo,
> # The native bridge sees the instanceB request with ID 0 and ignores it 
> because it is less than request ID X.
> # The Device plugin never gets a callback and therefore prevents the 
> deviceready event from firing.
> Possible Solutions:
> # Cordova should make an initial XHR request to reset the request ID on the 
> native bridge. Perhaps "gap_init" instead of "gap_exec".



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to