Viewing Issue Advanced Details

ID 0003738 Category [DMDirc] User Interface Severity minor
Reproducibility always Date Submitted 2010-02-05 19:19 Last Update 2010-03-06 21:32
Reporter Error Reporter Assigned To Greboid View Status public
Priority normal Status closed Resolution fixed
Platform Fixed in Version Target Version 0.6.3
Product Version Product Build 0.6.3b1-7-gec9d9ce
Summary 0003738: java.util.ConcurrentModificationException — addons.ui_swing.framemanager.windowmenu.WindowMenuFrameManager.selectionChanged(Wind
Description java.util.ConcurrentModificationException
java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
java.util.HashMap$ValueIterator.next(HashMap.java:822)
com.dmdirc.addons.ui_swing.framemanager.windowmenu.WindowMenuFrameManager.selectionChanged(WindowMenuFrameManager.java:267)
com.dmdirc.FrameContainer.windowActivated(FrameContainer.java:300)
com.dmdirc.addons.ui_swing.components.frames.TextFrame$19.doInBackground(TextFrame.java:754)
javax.swing.SwingWorker$1.call(SwingWorker.java:278)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
java.util.concurrent.FutureTask.run(FutureTask.java:138)
javax.swing.SwingWorker.run(SwingWorker.java:317)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:619)

Which caused: java.util.concurrent.ExecutionException: java.util.ConcurrentModificationException
java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
java.util.concurrent.FutureTask.get(FutureTask.java:83)
javax.swing.SwingWorker.get(SwingWorker.java:583)
com.dmdirc.addons.ui_swing.components.LoggingSwingWorker.done(LoggingSwingWorker.java:47)
javax.swing.SwingWorker$5.run(SwingWorker.java:718)
javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:864)
sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:95)
javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:874)
javax.swing.Timer.fireActionPerformed(Timer.java:271)
javax.swing.Timer$DoPostEvent.run(Timer.java:201)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
com.dmdirc.addons.ui_swing.DMDircEventQueue.dispatchEvent(DMDircEventQueue.java:79)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Needs unit test no
Upstream Bug URL

Relationships

Notes

(0009752)
Version Control (developer)
2010-02-05 20:11

A patchset (1) related to this change has been added to gerrit by Gregory Holmes

Lets try this again

Fixes issue 3738

Change-Id: If5ec31e73f30f05aa4851998711837054ed63322
(0009769)
Version Control (developer)
2010-02-07 15:47

A patchset (2) related to this change has been added to gerrit by Gregory Holmes

Lets try this again

Fixes issue 3738

Change-Id: If5ec31e73f30f05aa4851998711837054ed63322
(0009770)
Version Control (developer)
2010-02-07 15:47

A patchset (3) related to this change has been added to gerrit by Gregory Holmes

Lets try this again

Fixes issue 3738

Change-Id: If5ec31e73f30f05aa4851998711837054ed63322
(0009771)
Version Control (developer)
2010-02-07 15:48

A patchset (4) related to this change has been added to gerrit by Gregory Holmes

Lets try this again

Fixes issue 3738

Change-Id: If5ec31e73f30f05aa4851998711837054ed63322
(0009772)
Version Control (developer)
2010-02-07 19:59

A patchset (5) related to this change has been added to gerrit by Gregory Holmes

Lets try this again

Fixes issue 3738

Change-Id: If5ec31e73f30f05aa4851998711837054ed63322
authorGregory Holmes <greg@dmdirc.com>2010-02-05 20:11:01 (GMT)
committer Shane Mc Cormack <shane@dmdirc.com>2010-02-07 23:13:32 (GMT)
commite4b3744fdc8e3a79a05c669ec6de1a53c9e96bd3 (patch) (side-by-side diff)
Lets try this again
Fixes issue 3738 Change-Id: If5ec31e73f30f05aa4851998711837054ed63322 Reviewed-on: http://gerrit.dmdirc.com/850 Automatic-Compile: DMDirc Local Commits <dmdirc@googlemail.com> Reviewed-by: Shane Mc Cormack <shane@dmdirc.com>
-rw-r--r--src/com/dmdirc/addons/ui_swing/framemanager/windowmenu/WindowMenuFrameManager.java38
1 files changed, 22 insertions, 16 deletions
Click to Expand/Collapse
diff src/com/dmdirc/addons/ui_swing/framemanager/windowmenu/WindowMenuFrameManager.java
@@ -87,12 +87,12 @@ public final class WindowMenuFrameManager extends JMenu implements
super();
this.controller = controller;
- menus = Collections.synchronizedMap(new HashMap<FrameContainer,
- FrameContainerMenu>());
- items = Collections.synchronizedMap(new HashMap<FrameContainer,
- FrameContainerMenuItem>());
- menuItems = Collections.synchronizedMap(new HashMap<FrameContainer,
- FrameContainerMenuItem>());
+ menus = Collections.synchronizedMap(
+ new HashMap<FrameContainer, FrameContainerMenu>());
+ items = Collections.synchronizedMap(
+ new HashMap<FrameContainer, FrameContainerMenuItem>());
+ menuItems = Collections.synchronizedMap(
+ new HashMap<FrameContainer, FrameContainerMenuItem>());
setText("Window");
setMnemonic('w');
@@ -259,16 +259,22 @@ public final class WindowMenuFrameManager extends JMenu implements
/** {@inheritDoc} */
@Override
public void selectionChanged(final Window window) {
- activeWindow = window;
- //iterate over menu items seperately here to simplify code in listeners
- for (SelectionListener menuItem : menus.values()) {
- menuItem.selectionChanged(window);
- }
- for (SelectionListener menuItem : items.values()) {
- menuItem.selectionChanged(window);
- }
- for (SelectionListener menuItem : menuItems.values()) {
- menuItem.selectionChanged(window);
+ synchronized (menus) {
+ synchronized (items) {
+ synchronized (menuItems) {
+ activeWindow = window;
+ //iterate over menu items seperately here to simplify code in listeners
+ for (SelectionListener menuItem : menus.values()) {
+ menuItem.selectionChanged(window);
+ }
+ for (SelectionListener menuItem : items.values()) {
+ menuItem.selectionChanged(window);
+ }
+ for (SelectionListener menuItem : menuItems.values()) {
+ menuItem.selectionChanged(window);
+ }
+ }
+ }
}
}

Issue History

Date Modified Username Field Change
2010-02-05 19:19 Error Reporter New Issue
2010-02-05 19:19 Error Reporter Status new => assigned
2010-02-05 19:19 Error Reporter Assigned To => Greboid
2010-02-05 20:11 Version Control Checkin
2010-02-05 20:11 Version Control Note Added: 0009752
2010-02-05 20:11 Version Control Status assigned => fix pending
2010-02-06 20:03 Greboid View Status private => public
2010-02-07 15:47 Version Control Checkin
2010-02-07 15:47 Version Control Note Added: 0009769
2010-02-07 15:47 Version Control Checkin
2010-02-07 15:47 Version Control Note Added: 0009770
2010-02-07 15:48 Version Control Checkin
2010-02-07 15:48 Version Control Note Added: 0009771
2010-02-07 19:59 Version Control Checkin
2010-02-07 19:59 Version Control Note Added: 0009772
2010-02-07 23:14 Greboid Checkin
2010-02-07 23:14 Greboid Note Added: 0009782
2010-02-07 23:14 Greboid Status fix pending => resolved
2010-02-07 23:14 Greboid Resolution open => fixed
2010-03-06 21:32 Greboid Status resolved => closed