incubator-callback-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tom Clarkson (JIRA)" <>
Subject [jira] [Commented] (CB-1404) EXC_BAD_ACCESS when using XHR_WITH_PAYLOAD bridge mode
Date Tue, 25 Sep 2012 07:37:07 GMT


Tom Clarkson commented on CB-1404:

You should have access to that code now if you still need to reproduce it, but I think I have
tracked down the actual cause now.

The key difference between XHR_WITH_PAYLOAD and XHR_NO_PAYLOAD is the use of commandQueueFlushing
- it prevents a new request from being sent until it is unset as the final step of the previous
request. Without that check, there is nothing to stop the second plugin call from running
before execXhr is ready for reuse. 

A small change to exec fixes the issue:

        //    execXhr = execXhr || new XMLHttpRequest();
            if (!execXhr || execXhr.readyState != 4) execXhr = new XMLHttpRequest();

If the previous request has not finished, a new request is created so that the previous request
can finish rather than being cancelled at a point which triggers a system bug. 

> EXC_BAD_ACCESS when using XHR_WITH_PAYLOAD bridge mode 
> -------------------------------------------------------
>                 Key: CB-1404
>                 URL:
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: iOS
>    Affects Versions: 2.1.0
>         Environment: iPad 2, iOS 5.1.1
>            Reporter: Tom Clarkson
>            Assignee: Andrew Grieve
>             Fix For: 2.2.0
> When calling a plugin the app crashes on WebThread with EXC_BAD_ACCESS in WebCore::DocumentThreadableLoader::cancel.
> This appears to be some sort of timing issue, as it does not happen on every call - I
am seeing it in an autosave function which makes lots of calls to PGSQLitePlugin. 
> The error did not appear before upgrading to 2.1, and setting the bridge mode to IFRAME_NAV
restores the previous behaviour (no crashes, but odd scrolling functionality).
> Setting the bridge mode to XHR_NO_PAYLOAD also seems to fix it - not sure if removing
the payload actually does anything different or just makes it fast enough that the timing
condition does not come up in normal app usage.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:

View raw message