Hi.

I’ve come across a deadlock when the SVGAnimationEngine class calls
RunnableQueue.setIdleRunnable to start the animation ticking, while at
the same time the RunnableQueue is suspended:

  Found one Java-level deadlock:
  =============================
  "Thread-1149":
    waiting to lock monitor 0x080bb9d8 (object 0xa1cc1b20, a 
org.apache.batik.util.RunnableQueue),
    which is held by "RunnableQueue-26"
  "RunnableQueue-26":
    waiting to lock monitor 0x080bbb68 (object 0xa1cc1a28, a 
org.apache.batik.bridge.UpdateManager),
    which is held by "Thread-1149"
  
  Java stack information for the threads listed above:
  ===================================================
  "Thread-1149":
          at 
org.apache.batik.util.RunnableQueue.setIdleRunnable(RunnableQueue.java:494)
          - waiting to lock <0xa1cc1b20> (a org.apache.batik.util.RunnableQueue)
          at 
org.apache.batik.bridge.SVGAnimationEngine.start(SVGAnimationEngine.java:428)
          at 
org.apache.batik.bridge.BaseScriptingEnvironment.dispatchSVGLoadEvent(BaseScriptingEnvironment.java:550)
          at 
org.apache.batik.bridge.UpdateManager.dispatchSVGLoadEvent(UpdateManager.java:239)
          at 
org.apache.batik.bridge.UpdateManager.dispatchSVGLoadEvent(UpdateManager.java:220)
          - locked <0xa1cc1a28> (a org.apache.batik.bridge.UpdateManager)
          at 
org.apache.batik.swing.svg.SVGLoadEventDispatcher.run(SVGLoadEventDispatcher.java:100)
  "RunnableQueue-26":
          at 
org.apache.batik.bridge.UpdateManager$UpdateManagerRunHander.executionSuspended(UpdateManager.java:877)
          - waiting to lock <0xa1cc1a28> (a 
org.apache.batik.bridge.UpdateManager)
          at 
org.apache.batik.util.RunnableQueue.executionSuspended(RunnableQueue.java:508)
          - locked <0xa1cc1b20> (a org.apache.batik.util.RunnableQueue)
          at org.apache.batik.util.RunnableQueue.run(RunnableQueue.java:167)
          at java.lang.Thread.run(Thread.java:619)

I’m not so good at threading issues: what’s the correct solution?  Does
RunnableQueue.setIdleRunnable really need to be synchronized?

Thanks,

Cameron

-- 
Cameron McCormack, http://mcc.id.au/
        xmpp:[EMAIL PROTECTED]  ▪  ICQ 26955922  ▪  MSN [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to