supreme catch, JR! Nico is our synchronization expert, but that does
seem to work. I ran
for (int i = 0; i < 100; i++)
jmol.viewer.script("echo test "+ i);
and got one single queue.
Bob
JR Schmidt wrote:
>I believe that I discovered a nasty little race condition in the
>org.jmol.viewer.ScriptManager class, which rears its head when
>multiple calls to JMolViewer.script() are made in rapid
>succession. Obviously, this is most likely to occur when using
>JMolViewer programmatically, rather than from JavaScript (since
>JavaScript is too slow to call frequently enough).
>
>In any case, the problem is that the ScriptManager.addScript() method
>first checks to see if the script execution thread is running; if
>not, it starts it. The problem is that if two calls to addScript are
>made in rapid succession, multiple threads can be created, and the
>resulting scripts are run multiple times. Not good!
>
>The solution is to move the setting of scriptQueueRunning = true from
>the run() method of ScriptQueueRunnable to the start ScriptQueue
>function itself. This eliminates the problem.
>
> private void startScriptQueue() {
> if (scriptQueueRunning)
> return;
> scriptQueueRunning = true; <- set it here!
> queueThread = new Thread(new ScriptQueueRunnable());
> queueThread.start();
> }
>
>The astute coder may not that this doesn't actually eliminate the
>race condition, it just mitigates it. There is still a race
>condition between the check in the if statement and the setting of
>the variable. I think (but I haven't verified) that this can be
>eliminated with a synchronized block, like
>
> private void startScriptQueue() {
> synchronized(this) {
> if (scriptQueueRunning)
> return;
> scriptQueueRunning = true; <- set it here!
> }
> queueThread = new Thread(new ScriptQueueRunnable());
> queueThread.start();
> }
>
>I don't have SVN write access, so I'll leave the final solution to
>one of you fine fellows.
>
> JR Schmidt
>
>
>-------------------------------------------------------------------------
>Using Tomcat but need to do more? Need to support web services, security?
>Get stuff done quickly with pre-integrated technology to make your job easier
>Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
>http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
>_______________________________________________
>Jmol-developers mailing list
>[email protected]
>https://lists.sourceforge.net/lists/listinfo/jmol-developers
>
>
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Jmol-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-developers