Dukascopy
 
 
Wiki JStore Search Login

context.openChart(fd) and AWT concurrency bug
 Post subject: context.openChart(fd) and AWT concurrency bug Post rating: 0   New post Posted: Mon 26 Aug, 2013, 15:04 
User avatar

User rating: 70
Joined: Sat 22 Sep, 2012, 17:43
Posts: 118
Location: Brazil, Fortaleza, Ceará
Dukascopy Bank ver. 2.26.6 / JForex API ver. 2.9.0.1 - Historical Tester -> onStart()

During routine use of the historical tester, stopping and starting a strategy that opens 6 charts (context.openChart(fd)) causes a DEADLOCK
involving the "StrategyRunner Thread" and the "AWT-EventQueue-0" thread.

Have had to issue kill -9 PID over 20 times in the last 24 hours accommodating this re-occuring issue.

Thread Dump (kill -3 PID) below for your information:
Found one Java-level deadlock:
=============================
"StrategyRunner Thread":
  waiting to lock monitor 0x00007f6a3c136b78 (object 0x00000007827cb3e0, a java.awt.Component$AWTTreeLock),
  which is held by "AWT-EventQueue-0"
"AWT-EventQueue-0":
  waiting to lock monitor 0x000000000184ad80 (object 0x00000007833cfcd8, a java.lang.Class),
  which is held by "StrategyRunner Thread"

Java stack information for the threads listed above:
===================================================
"StrategyRunner Thread":
   at java.awt.Component.setFont(Component.java:1873)
   - waiting to lock <0x00000007827cb3e0> (a java.awt.Component$AWTTreeLock)
   at java.awt.Container.setFont(Container.java:1743)
   at javax.swing.JComponent.setFont(JComponent.java:2751)
   at com.dukascopy.dds2.greed.gui.l10n.components.JLocalizableAnnotatedTable.ex(Unknown Source)
   at com.dukascopy.dds2.greed.gui.l10n.LocalizationManager.a(Unknown Source)
   - locked <0x00000007833cfcd8> (a java.lang.Class for com.dukascopy.dds2.greed.gui.l10n.LocalizationManager)
   at com.dukascopy.dds2.greed.gui.l10n.components.JLocalizableAnnotatedTable.<init>(Unknown Source)
   at com.dukascopy.charts.tablebuilder.component.table.DataTablePresentationAbstractJTable.<init>(Unknown Source)
   at com.dukascopy.charts.tablebuilder.component.table.TickDataTablePresentationJTable.<init>(Unknown Source)
   at com.dukascopy.charts.tablebuilder.j.xO(Unknown Source)
   at com.dukascopy.charts.tablebuilder.j.xN(Unknown Source)
   at com.dukascopy.charts.tablebuilder.j.xv(Unknown Source)
   at com.dukascopy.charts.tablebuilder.a.xo(Unknown Source)
   at com.dukascopy.charts.chartbuilder.i.hM(Unknown Source)
   at com.dukascopy.charts.chartbuilder.i.hL(Unknown Source)
   at com.dukascopy.charts.chartbuilder.i.gL(Unknown Source)
   at com.dukascopy.charts.chartbuilder.s.gL(Unknown Source)
   at com.dukascopy.charts.chartbuilder.b.gL(Unknown Source)
   at com.dukascopy.charts.main.DDSChartsControllerImpl.c(Unknown Source)
   at com.dukascopy.charts.main.DDSChartsControllerImpl.b(Unknown Source)
   at com.dukascopy.dds2.greed.gui.component.chart.d.d(Unknown Source)
   at com.dukascopy.dds2.greed.gui.component.chart.d.a(Unknown Source)
   at com.dukascopy.dds2.greed.gui.component.chart.d.a(Unknown Source)
   at com.dukascopy.dds2.greed.gui.component.tree.actions.k.K(Unknown Source)
   at com.dukascopy.dds2.greed.gui.component.tree.actions.ax.execute(Unknown Source)
   at com.dukascopy.dds2.greed.gui.component.tree.p.a(Unknown Source)
   at com.dukascopy.dds2.greed.agent.strategy.tester.ao.aK(Unknown Source)
   at com.dukascopy.dds2.greed.agent.strategy.tester.ao.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at com.dukascopy.dds2.greed.agent.strategy.tester.y.openChart(Unknown Source)
        at quant.main.logic.strat1.onStart(strat1.java:2624)                                       <===========================
   at com.dukascopy.dds2.greed.agent.strategy.tester.v.run(Unknown Source)
   at com.dukascopy.dds2.greed.agent.strategy.tester.b.a(Unknown Source)
   at com.dukascopy.dds2.greed.actions.servicesources.StrategyTesterAction.Ci(Unknown Source)
   at com.dukascopy.dds2.greed.actions.servicesources.StrategyTesterAction.BH(Unknown Source)
   at com.dukascopy.dds2.greed.actions.c.run(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
   at java.lang.Thread.run(Thread.java:722)
"AWT-EventQueue-0":
   at com.dukascopy.dds2.greed.gui.l10n.LocalizationManager.a(Unknown Source)
   - waiting to lock <0x00000007833cfcd8> (a java.lang.Class for com.dukascopy.dds2.greed.gui.l10n.LocalizationManager)
   at com.dukascopy.dds2.greed.gui.l10n.components.JLocalizableLabel.<init>(Unknown Source)
   at com.dukascopy.dds2.greed.gui.component.chart.toolbar.ChartToolBar$22.getListCellRendererComponent(Unknown Source)
   at javax.swing.plaf.synth.SynthComboBoxUI.paintCurrentValue(SynthComboBoxUI.java:379)
   at javax.swing.plaf.synth.SynthComboBoxUI.paint(SynthComboBoxUI.java:358)
   at javax.swing.plaf.synth.SynthComboBoxUI.update(SynthComboBoxUI.java:326)
   at javax.swing.JComponent.paintComponent(JComponent.java:778)
   at javax.swing.JComponent.paint(JComponent.java:1054)
   at javax.swing.JComponent.paintChildren(JComponent.java:887)
   - locked <0x00000007827cb3e0> (a java.awt.Component$AWTTreeLock)
   at javax.swing.JComponent.paint(JComponent.java:1063)
   at javax.swing.JComponent.paintChildren(JComponent.java:887)
   - locked <0x00000007827cb3e0> (a java.awt.Component$AWTTreeLock)
   at javax.swing.JComponent.paint(JComponent.java:1063)
   at javax.swing.JComponent.paintChildren(JComponent.java:887)
   - locked <0x00000007827cb3e0> (a java.awt.Component$AWTTreeLock)
   at javax.swing.JComponent.paint(JComponent.java:1063)
   at javax.swing.JComponent.paintChildren(JComponent.java:887)
   - locked <0x00000007827cb3e0> (a java.awt.Component$AWTTreeLock)
   at javax.swing.JComponent.paint(JComponent.java:1063)
   at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
   at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
   at javax.swing.RepaintManager.paint(RepaintManager.java:1236)
   at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
   at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
   at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
   at javax.swing.RepaintManager$3.run(RepaintManager.java:784)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
   at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:784)
   at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:757)
   at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:706)
   at javax.swing.RepaintManager.access$1000(RepaintManager.java:62)
   at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1651)
   at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
   at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727)
   at java.awt.EventQueue.access$200(EventQueue.java:103)
   at java.awt.EventQueue$3.run(EventQueue.java:688)
   at java.awt.EventQueue$3.run(EventQueue.java:686)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:697)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Found 1 deadlock.

Heap
 PSYoungGen      total 335424K, used 47338K [0x00000007d5560000, 0x00000007eaab0000, 0x0000000800000000)
  eden space 321856K, 12% used [0x00000007d5560000,0x00000007d7bae790,0x00000007e8fb0000)
  from space 13568K, 59% used [0x00000007e8fb0000,0x00000007e979c3e0,0x00000007e9cf0000)
  to   space 13184K, 0% used [0x00000007e9dd0000,0x00000007e9dd0000,0x00000007eaab0000)
 ParOldGen       total 699072K, used 649206K [0x0000000780000000, 0x00000007aaab0000, 0x00000007d5560000)
  object space 699072K, 92% used [0x0000000780000000,0x00000007a79fd9d8,0x00000007aaab0000)
 PSPermGen       total 49088K, used 49024K [0x000000077ae00000, 0x000000077ddf0000, 0x0000000780000000)
  object space 49088K, 99% used [0x000000077ae00000,0x000000077dde0140,0x000000077ddf0000)

at quant.main.logic.strat1.onStart(strat1.java:2624)
2609:            fd = new FeedDescriptor();
2610:            fd.setDataType(DataType.TIME_PERIOD_AGGREGATION);
2611:            fd.setFilter(Filter.WEEKENDS);
2612:            fd.setInstrument(myInstrument);
2613:            fd.setOfferSide(OfferSide.BID);
2614:            fd.setPeriod(Period.ONE_HOUR);
2616:            charts[0] = context.openChart(fd);
2617:   
2618:            fd = new FeedDescriptor();
2619:            fd.setDataType(DataType.TIME_PERIOD_AGGREGATION);
2620:            fd.setFilter(Filter.WEEKENDS);
2621:            fd.setInstrument(myInstrument);
2622:            fd.setOfferSide(OfferSide.BID);
2623:            fd.setPeriod(Period.THIRTY_MINS);
2624:            charts[1] = context.openChart(fd);    <===============================

.....            and so on until charts[5]


 
 Post subject: Re: context.openChart(fd) and AWT concurrency bug Post rating: 0   New post Posted: Tue 27 Aug, 2013, 11:00 
JForex Master
User avatar

User rating:
Joined: Wed 16 Sep, 2009, 18:23
Posts: 1054
Location: Geneva, Switzerland
We will rectify this as soon as possible. Thank you for the great feedback.


 
 Post subject: Re: context.openChart(fd) and AWT concurrency bug Post rating: 0   New post Posted: Wed 18 Sep, 2013, 17:04 
JForex Master
User avatar

User rating:
Joined: Wed 16 Sep, 2009, 18:23
Posts: 1054
Location: Geneva, Switzerland
Fixed in 2.27.2. Available on DEMO at the moment.


 

Jump to:  

cron
  © 1998-2025 Dukascopy® Bank SA
On-line Currency forex trading with Swiss Forex Broker - ECN Forex Brokerage,
Managed Forex Accounts, introducing forex brokers, Currency Forex Data Feed and News
Currency Forex Trading Platform provided on-line by Dukascopy.com