bigdataviewer / bigdataviewer-core

ImgLib2-based viewer for registered SPIM stacks and more
BSD 2-Clause "Simplified" License
33 stars 35 forks source link

Hard to reproduce threadlock BehaviourTransformEventHandler3D and transformChanged #95

Closed NicoKiaru closed 4 years ago

NicoKiaru commented 4 years ago

Hi,

I've encounteered this pretty rare threadlock. I'm putting it here for the record. I'm not sure what part of bdv-core vs my own stuff is responsible for it. I'll add more info if this happens again and if I know more.

Thread dump:

Java stack information for the threads listed above:
===================================================
"SciJava-3171e854-Thread-1":
        at bdv.BehaviourTransformEventHandler3D.setTransform(BehaviourTransformEventHandler3D.java:180)
        - waiting to lock <0x0000000781fcba58> (a net.imglib2.realtransform.AffineTransform3D)
        at bdv.BehaviourTransformEventHandler3D.setTransform(BehaviourTransformEventHandler3D.java:52)
        at bdv.viewer.ViewerPanel.setCurrentViewerTransform(ViewerPanel.java:759)
        - locked <0x0000000781fc6538> (a bdv.viewer.ViewerPanel)
        at bdv.tools.InitializeViewerState.initTransform(InitializeViewerState.java:81)
        at bdv.util.BdvHandle.tryInitTransform(BdvHandle.java:195)
        - locked <0x0000000781fc35b8> (a bdv.util.BdvHandleFrame)
        at bdv.util.BdvHandle.add(BdvHandle.java:179)
        - locked <0x0000000781fc35b8> (a bdv.util.BdvHandleFrame)
        at bdv.util.BdvFunctions.addRandomAccessibleInterval(BdvFunctions.java:449)
        at bdv.util.BdvFunctions.show(BdvFunctions.java:86)
        at sc.fiji.bdvpg.bdv.BdvCreator.get(BdvCreator.java:115)
        at sc.fiji.bdvpg.scijava.command.bdv.BdvWindowCreatorCommand.run(BdvWindowCreatorCommand.java:67)
        at org.scijava.command.CommandModule.run(CommandModule.java:199)
        at org.scijava.module.ModuleRunner.run(ModuleRunner.java:168)
        at org.scijava.module.ModuleRunner.call(ModuleRunner.java:127)
        at org.scijava.module.ModuleRunner.call(ModuleRunner.java:66)
        at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:228)
        at org.scijava.thread.DefaultThreadService$$Lambda$114/1691007305.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
"AWT-EventQueue-0":
        at bdv.viewer.ViewerPanel.transformChanged(ViewerPanel.java:560)
        - waiting to lock <0x0000000781fc6538> (a bdv.viewer.ViewerPanel)
        at bdv.viewer.ViewerPanel.transformChanged(ViewerPanel.java:104)
        at net.imglib2.ui.InteractiveDisplayCanvasComponent.transformChanged(InteractiveDisplayCanvasComponent.java:285)
        at bdv.BehaviourTransformEventHandler3D.notifyListener(BehaviourTransformEventHandler3D.java:229)
        at bdv.BehaviourTransformEventHandler3D.setCanvasSize(BehaviourTransformEventHandler3D.java:202)
        - locked <0x0000000781fcba58> (a net.imglib2.realtransform.AffineTransform3D)
        at net.imglib2.ui.InteractiveDisplayCanvasComponent$1.componentResized(InteractiveDisplayCanvasComponent.java:112)
        at java.awt.Component.processComponentEvent(Component.java:6365)
        at java.awt.Component.processEvent(Component.java:6319)
        at java.awt.Container.processEvent(Container.java:2239)
        at java.awt.Component.dispatchEventImpl(Component.java:4889)
        at java.awt.Container.dispatchEventImpl(Container.java:2297)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
        at java.awt.EventQueue$4.run(EventQueue.java:733)
        at java.awt.EventQueue$4.run(EventQueue.java:731)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Found 1 deadlock.
tpietzsch commented 4 years ago

This deadlock is fixed in this in-progress branch https://github.com/bigdataviewer/bigdataviewer-core/tree/generic-renderer-revised

NicoKiaru commented 4 years ago

Closing this issue then.