incubator-callback-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bryce Curtis (Assigned) (JIRA)" <j...@apache.org>
Subject [jira] [Assigned] (CB-135) Multithreaded access on CallbackServer javascript object
Date Sat, 07 Jan 2012 03:59:39 GMT

     [ https://issues.apache.org/jira/browse/CB-135?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Bryce Curtis reassigned CB-135:
-------------------------------

    Assignee: Bryce Curtis
    
> 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
>
> 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

        

Mime
View raw message