Skip to content
GitLab
  • Menu
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in
  • V vadere
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 119
    • Issues 119
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 9
    • Merge requests 9
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • vadere
  • vadere
  • Merge requests
  • !96

call fireChangeViewportEvent from awt Event Thread

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Stefan Schuhbaeck requested to merge fix-gui-deadlock into master Nov 28, 2019
  • Overview 0
  • Commits 2
  • Pipelines 2
  • Changes 2

@BZoennchen does that makes sense?

I had the issue that the packaged vadere GUI sometimes stoped after the first simulation step. After looking at the threads via jconsole it seems that fireChangeViewportEvent (marked with ** in first stack trace) will synchronize on the model and the awt event thread will do the same --> deadlock. This only happed for big scenarios for what I saw.

If the fix is correct just merge it :)

Name: Thread-0
State: BLOCKED on java.awt.Component$AWTTreeLock@7d505529 owned by: AWT-EventQueue-0
Total blocked: 1  Total waited: 0

Stack trace: 
java.awt.Component.resize(Component.java:2241)
java.awt.Component.setSize(Component.java:2227)
java.awt.Component.resize(Component.java:2275)
java.awt.Component.setSize(Component.java:2262)
javax.swing.JViewport.setViewSize(JViewport.java:1139)
org.vadere.gui.components.control.ViewportChangeListener.viewportChange(ViewportChangeListener.java:50)
org.vadere.gui.components.model.DefaultModel.notifyViewportListeners(DefaultModel.java:182) - locked org.vadere.gui.onlinevisualization.model.OnlineVisualizationModel@6ce9b79f
** org.vadere.gui.components.model.DefaultModel.fireChangeViewportEvent(DefaultModel.java:268) - locked org.vadere.gui.onlinevisualization.model.OnlineVisualizationModel@6ce9b79f
** org.vadere.gui.onlinevisualization.model.OnlineVisualizationModel.popDrawData(OnlineVisualizationModel.java:143) - locked java.lang.Object@746b397e
org.vadere.gui.onlinevisualization.OnlineVisualization.postUpdate(OnlineVisualization.java:112)
org.vadere.simulator.control.simulation.Simulation.run(Simulation.java:279)
org.vadere.simulator.control.simulation.ScenarioRun.run(ScenarioRun.java:158)
java.lang.Thread.run(Thread.java:834)
Name: AWT-EventQueue-0
State: BLOCKED on org.vadere.gui.onlinevisualization.model.OnlineVisualizationModel@6ce9b79f owned by: Thread-0
Total blocked: 123  Total waited: 433

Stack trace: 
org.vadere.gui.components.model.DefaultModel.setViewportBound(DefaultModel.java:273)  <--- needs lock on Model (not possible see above fireChangeViewportEvent)
org.vadere.gui.components.control.JViewportChangeListener.stateChanged(JViewportChangeListener.java:50)
javax.swing.JViewport.fireStateChanged(JViewport.java:1490)
javax.swing.JViewport.reshape(JViewport.java:954)
java.awt.Component.setBounds(Component.java:2326)
java.awt.Component.setBounds(Component.java:2477)
javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:888)
java.awt.Container.layout(Container.java:1537)
java.awt.Container.doLayout(Container.java:1526)
java.awt.Container.validateTree(Container.java:1722)
java.awt.Container.validate(Container.java:1657) - locked java.awt.Component$AWTTreeLock@7d505529
javax.swing.RepaintManager$3.run(RepaintManager.java:745)
javax.swing.RepaintManager$3.run(RepaintManager.java:743)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:742)
javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1889)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
java.awt.EventQueue$4.run(EventQueue.java:721)
java.awt.EventQueue$4.run(EventQueue.java:715)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Assignee
Assign to
Reviewer
Request review from
Time tracking
Source branch: fix-gui-deadlock