You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cordova.apache.org by "Bryce Curtis (Resolved) (JIRA)" <ji...@apache.org> on 2012/01/07 05:27:40 UTC
[jira] [Resolved] (CB-135) Multithreaded access on CallbackServer
javascript object
[ https://issues.apache.org/jira/browse/CB-135?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Bryce Curtis resolved CB-135.
-----------------------------
Resolution: Fixed
Fix Version/s: 1.4.0
Added synchronized to protect LinkedList javascript variable.
> Multithreaded access on CallbackServer javascript object
> --------------------------------------------------------
>
> Key: CB-135
> URL: https://issues.apache.org/jira/browse/CB-135
> Project: Apache Callback
> Issue Type: Bug
> Components: Android
> Affects Versions: 1.0.0, 1.2.0
> Reporter: Gwyn Judd
> Assignee: Bryce Curtis
> Fix For: 1.4.0
>
>
> Any access to the list of javascript statements for the callbackserver class is only partially protected by synchronized critical sections. The three main culprits are here:
> /**
> * Get the number of JavaScript statements.
> *
> * @return int
> */
> public int getSize() {
> int size = this.javascript.size();
> //System.out.println("getSize() = " + size);
> return size;
> }
>
> /**
> * Get the next JavaScript statement and remove from list.
> *
> * @return String
> */
> public String getJavascript() {
> if (this.javascript.size() == 0) {
> return null;
> }
> String statement = this.javascript.remove(0);
> //System.out.println("CallbackServer.getJavascript() = " + statement);
> if (this.javascript.size() == 0) {
> synchronized (this) {
> this.empty = true;
> }
> }
> return statement;
> }
>
> /**
> * Add a JavaScript statement to the list.
> *
> * @param statement
> */
> public void sendJavascript(String statement) {
> //System.out.println("CallbackServer.sendJavascript("+statement+")");
> this.javascript.add(statement);
> synchronized (this) {
> this.empty = false;
> this.notify();
> }
> }
> "this.javascript" is a LinkedList which is not synchronized. Therefore doing something like this "this.javascript.add(statement);" will not be thread safe and is likely to lead to corruption or other undefined behaviour.
> Obviously these methods are meant to be called in a multithreaded manner because of the existence of the synchronized blocks - the "javascript" list should also be protected.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira