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.2.0, 1.0.0
Reporter: Gwyn Judd
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