You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cordova.apache.org by Ivan Baktsheev <ow...@apla.me> on 2013/10/14 09:04:50 UTC

wp8 callbackId is broken

Hi everyone!

I've just found a bug in processing wp callbackId. When I'm trying to "cordova.exec" my own http client plugin several times, all requests after the first one fail with a message: "Failed to locate callback for id : XXXXX"

After some investigation I've came to conclusion that CommandFactory returns the same instance for those requests. And this instance of BaseCommmand stores callbackId into this.CurrentCommandCallbackId. So, if we have 5 simultaneous requests, only the last callbackId is used.

For now, I'm using DispatchCommandResult (result, unmodifiedCallbackId) and everything is working fine. DispatchCommandResult (result) is broken for simultaneous async plugin calls for the same plugin/method.

I cannot share code this time, but you can see the log below.

[107648>599025] HTTPClient.run (1) started
cordova.js exec    >>> callbackId is: HTTPClient217411808
CordovaCommandCall >>> CommandString : HTTPClient/request/HTTPClient217411808/["http://192.168.0.1/api/monitoring/status"]
NativeExecution    >>> HTTPClient217411808
[107648>816581] HTTPClient.run (1) started
cordova.js exec    >>> callbackId is: HTTPClient217411809
CordovaCommandCall >>> CommandString : HTTPClient/request/HTTPClient217411809/["http://192.168.0.1/api/monitoring/traffic-statistics"]
NativeExecution    >>> HTTPClient217411809
[107648>519782] HTTPClient.run (1) started
cordova.js exec    >>> callbackId is: HTTPClient217411810
CordovaCommandCall >>> CommandString : HTTPClient/request/HTTPClient217411810/["http://192.168.0.1/api/device/information"]
NativeExecution    >>> HTTPClient217411810
[107648>994073] HTTPClient.run (1) started
cordova.js exec    >>> callbackId is: HTTPClient217411811
CordovaCommandCall >>> CommandString : HTTPClient/request/HTTPClient217411811/["http://192.168.0.1/api/sms/sms-count"]
NativeExecution    >>> HTTPClient217411811
[107648>516070] HTTPClient.run (1) started
cordova.js exec    >>> callbackId is: HTTPClient217411812
CordovaCommandCall >>> CommandString : HTTPClient/request/HTTPClient217411812/["http://192.168.0.1/api/net/current-plmn"]
NativeExecution    >>> HTTPClient217411812
[019830] workflow complete in 930ms
The thread 0xc94 has exited with code 259 (0x103).
The thread 0xbc8 has exited with code 259 (0x103).
The thread 0xd6c has exited with code 259 (0x103).
The thread 0xa84 has exited with code 259 (0x103).
The thread 0xbb4 has exited with code 259 (0x103).
HTTPClientPlugin >>> stored callbackId: HTTPClient217411808
HTTPClientPlugin >>> stored callbackId: HTTPClient217411809
BaseCommand      >>> Failed to locate callback for id : HTTPClient217411812
[107648>516070] HTTPClient.run (4) task completed
[107648>516070] parsePage (1) started
[107648>516070] parsePage (4) task completed
have completed tasks
[107648>516070] workflow complete in 501ms
HTTPClientPlugin >>> stored callbackId: HTTPClient217411811
BaseCommand      >>> Failed to locate callback for id : HTTPClient217411812
HTTPClientPlugin >>> stored callbackId: HTTPClient217411810
BaseCommand      >>> Failed to locate callback for id : HTTPClient217411812
HTTPClientPlugin >>> stored callbackId: HTTPClient217411812
BaseCommand      >>> Failed to locate callback for id : HTTPClient217411812

Re: wp8 callbackId is broken

Posted by Jesse <pu...@gmail.com>.
The callbackid is passed to every native call.  If you have multiple
overlapping native calls you must manage this yourself.
In this case you should always use :
DispatchCommandResult(plugRes, callbackId);

@purplecabbage
risingj.com


On Mon, Oct 14, 2013 at 12:04 AM, Ivan Baktsheev <ow...@apla.me> wrote:

> Hi everyone!
>
> I've just found a bug in processing wp callbackId. When I'm trying to
> "cordova.exec" my own http client plugin several times, all requests after
> the first one fail with a message: "Failed to locate callback for id :
> XXXXX"
>
> After some investigation I've came to conclusion that CommandFactory
> returns the same instance for those requests. And this instance of
> BaseCommmand stores callbackId into this.CurrentCommandCallbackId. So, if
> we have 5 simultaneous requests, only the last callbackId is used.
>
> For now, I'm using DispatchCommandResult (result, unmodifiedCallbackId)
> and everything is working fine. DispatchCommandResult (result) is broken
> for simultaneous async plugin calls for the same plugin/method.
>
> I cannot share code this time, but you can see the log below.
>
> [107648>599025] HTTPClient.run (1) started
> cordova.js exec    >>> callbackId is: HTTPClient217411808
> CordovaCommandCall >>> CommandString :
> HTTPClient/request/HTTPClient217411808/["
> http://192.168.0.1/api/monitoring/status"]
> NativeExecution    >>> HTTPClient217411808
> [107648>816581] HTTPClient.run (1) started
> cordova.js exec    >>> callbackId is: HTTPClient217411809
> CordovaCommandCall >>> CommandString :
> HTTPClient/request/HTTPClient217411809/["
> http://192.168.0.1/api/monitoring/traffic-statistics"]
> NativeExecution    >>> HTTPClient217411809
> [107648>519782] HTTPClient.run (1) started
> cordova.js exec    >>> callbackId is: HTTPClient217411810
> CordovaCommandCall >>> CommandString :
> HTTPClient/request/HTTPClient217411810/["
> http://192.168.0.1/api/device/information"]
> NativeExecution    >>> HTTPClient217411810
> [107648>994073] HTTPClient.run (1) started
> cordova.js exec    >>> callbackId is: HTTPClient217411811
> CordovaCommandCall >>> CommandString :
> HTTPClient/request/HTTPClient217411811/["
> http://192.168.0.1/api/sms/sms-count"]
> NativeExecution    >>> HTTPClient217411811
> [107648>516070] HTTPClient.run (1) started
> cordova.js exec    >>> callbackId is: HTTPClient217411812
> CordovaCommandCall >>> CommandString :
> HTTPClient/request/HTTPClient217411812/["
> http://192.168.0.1/api/net/current-plmn"]
> NativeExecution    >>> HTTPClient217411812
> [019830] workflow complete in 930ms
> The thread 0xc94 has exited with code 259 (0x103).
> The thread 0xbc8 has exited with code 259 (0x103).
> The thread 0xd6c has exited with code 259 (0x103).
> The thread 0xa84 has exited with code 259 (0x103).
> The thread 0xbb4 has exited with code 259 (0x103).
> HTTPClientPlugin >>> stored callbackId: HTTPClient217411808
> HTTPClientPlugin >>> stored callbackId: HTTPClient217411809
> BaseCommand      >>> Failed to locate callback for id : HTTPClient217411812
> [107648>516070] HTTPClient.run (4) task completed
> [107648>516070] parsePage (1) started
> [107648>516070] parsePage (4) task completed
> have completed tasks
> [107648>516070] workflow complete in 501ms
> HTTPClientPlugin >>> stored callbackId: HTTPClient217411811
> BaseCommand      >>> Failed to locate callback for id : HTTPClient217411812
> HTTPClientPlugin >>> stored callbackId: HTTPClient217411810
> BaseCommand      >>> Failed to locate callback for id : HTTPClient217411812
> HTTPClientPlugin >>> stored callbackId: HTTPClient217411812
> BaseCommand      >>> Failed to locate callback for id : HTTPClient217411812