Viewing Issue Advanced Details

ID 0003745 Category [DMDirc] *Unsorted Severity minor
Reproducibility always Date Submitted 2010-02-07 20:52 Last Update 2010-02-18 20:19
Reporter Greboid Assigned To MD87 View Status public
Priority normal Status closed Resolution fixed
Platform Fixed in Version Target Version 0.6.3
Product Version Product Build
Summary 0003745: deadlock in icon updated
Description
deadlock in icon updated
Needs unit test no
Upstream Bug URL

Relationships

Notes

(0009776)
Greboid (administrator)
2010-02-07 20:52

"SwingWorker-pool-1-thread-10":
    at com.dmdirc.FrameContainer.windowActivated(FrameContainer.java:299)
    - waiting to lock <0xae441020> (a com.dmdirc.util.ListenerList)
    at com.dmdirc.addons.ui_swing.components.frames.TextFrame$19.doInBackground(TextFrame.java:754)
    at javax.swing.SwingWorker$1.call(SwingWorker.java:278)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at javax.swing.SwingWorker.run(SwingWorker.java:317)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
"IRC Parser thread":
    at com.dmdirc.Server.getChannelPrefixes(Server.java:893)
    - waiting to lock <0x73d339c0> (a java.lang.Object)
    at com.dmdirc.ui.messages.Styliser.doLinks(Styliser.java:275)
    at com.dmdirc.ui.messages.Styliser.addStyledString(Styliser.java:184)
    at com.dmdirc.addons.ui_swing.components.TopicBar.topicChanged(TopicBar.java:214)
    at com.dmdirc.Channel.addTopic(Channel.java:567)
    - locked <0xae441020> (a com.dmdirc.util.ListenerList)
    at com.dmdirc.ChannelEventHandler.onChannelTopic(ChannelEventHandler.java:136)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.dmdirc.parser.common.CallbackObjectSpecific.call(CallbackObjectSpecific.java:174)
    at com.dmdirc.parser.irc.ProcessTopic.callChannelTopic(ProcessTopic.java:82)
    at com.dmdirc.parser.irc.ProcessTopic.process(ProcessTopic.java:55)
    at com.dmdirc.parser.irc.ProcessingManager.process(ProcessingManager.java:193)
    at com.dmdirc.parser.irc.IRCParser.processLine(IRCParser.java:1103)
    at com.dmdirc.parser.irc.IRCParser.run(IRCParser.java:858)
    at java.lang.Thread.run(Thread.java:619)
"SwingWorker-pool-1-thread-5":
    at com.dmdirc.FrameContainer.iconUpdated(FrameContainer.java:162)
    - waiting to lock <0xae441020> (a com.dmdirc.util.ListenerList)
    at com.dmdirc.FrameContainer.setIcon(FrameContainer.java:151)
    at com.dmdirc.Channel.resetWindow(Channel.java:331)
    at com.dmdirc.Server.clearChannels(Server.java:678)
    at com.dmdirc.Server.onSocketClosed(Server.java:1319)
    - locked <0x73d33cb0> (a java.lang.Object)
    at com.dmdirc.ServerEventHandler.onSocketClosed(ServerEventHandler.java:173)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.dmdirc.parser.common.CallbackObject.call(CallbackObject.java:151)
    at com.dmdirc.parser.irc.IRCParser.callSocketClosed(IRCParser.java:583)
    at com.dmdirc.parser.irc.IRCParser.disconnect(IRCParser.java:1739)
    at com.dmdirc.Server.disconnect(Server.java:379)
    - locked <0x73d339c0> (a java.lang.Object)
    - locked <0x73d33cb0> (a java.lang.Object)
    at com.dmdirc.ServerManager.closeAll(ServerManager.java:133)
    - locked <0x7397c750> (a java.util.ArrayList)
    at com.dmdirc.addons.ui_swing.MainFrame$9.doInBackground(MainFrame.java:535)
    at javax.swing.SwingWorker$1.call(SwingWorker.java:278)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at javax.swing.SwingWorker.run(SwingWorker.java:317)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
(0009786)
MD87 (administrator)
2010-02-08 13:30

How reproducible is this? The only decent solution is to start running listeners in separate threads (which would need a ThreadPoolExecutor etc to do things sanely), and that's quite a large change for a feature freeze.
(0009787)
Greboid (administrator)
2010-02-08 13:34

Its happened during one of my nimbus test runs (which finds quite a few threading issues it seems), but I wouldn't say its hugely reproduceable. Feel free to drop this to the next release, I will be running nimbus more during the testing phase since it seems to throw up quite a few errors so I'll let you know if its common or not.

A patchset (1) related to this change has been added to gerrit by Chris Smith

Run some listeners in separate threads

Fixes issue 3745
Fixes issue 3758

Change-Id: Id611f5bca03f07c87f84c054d73cf1612221c0da

A patchset (2) related to this change has been added to gerrit by Chris Smith

Run some listeners in separate threads

Fixes issue 3745
Fixes issue 3758

Change-Id: Id611f5bca03f07c87f84c054d73cf1612221c0da

A patchset (3) related to this change has been added to gerrit by Chris Smith

Run some listeners in separate threads

Fixes issue 3745
Fixes issue 3758

Change-Id: Id611f5bca03f07c87f84c054d73cf1612221c0da
authorChris Smith <chris@dmdirc.com>2010-02-16 17:50:08 (GMT)
committer Gregory Holmes <greg@dmdirc.com>2010-02-17 02:37:09 (GMT)
commit984b36b234b943ea93d9fdb41b8bf53b77ef6713 (patch) (side-by-side diff)
Run some listeners in separate threads
Fixes issue 3745 Fixes issue 3758 Change-Id: Id611f5bca03f07c87f84c054d73cf1612221c0da Reviewed-on: http://gerrit.dmdirc.com/884 Reviewed-by: Gregory Holmes <greg@dmdirc.com> Automatic-Compile: Gregory Holmes <greg@dmdirc.com>
-rw-r--r--src/com/dmdirc/Channel.java15
-rw-r--r--src/com/dmdirc/Server.java25
2 files changed, 27 insertions, 13 deletions
Click to Expand/Collapse
diff src/com/dmdirc/Channel.java
@@ -566,11 +566,18 @@ public class Channel extends MessageTarget implements ConfigChangeListener {
topics.add(topic);
updateTitle();
- synchronized (listeners) {
- for (TopicChangeListener listener : listeners.get(TopicChangeListener.class)) {
- listener.topicChanged(this, topic);
+ new Thread(new Runnable() {
+
+ /** {@inheritDoc} */
+ @Override
+ public void run() {
+ synchronized (listeners) {
+ for (TopicChangeListener listener : listeners.get(TopicChangeListener.class)) {
+ listener.topicChanged(Channel.this, topic);
+ }
+ }
}
- }
+ }, "Topic change listener runner").start();
}
/**
Click to Expand/Collapse
diff src/com/dmdirc/Server.java
@@ -1711,17 +1711,24 @@ public class Server extends WritableFrameContainer implements ConfigChangeListen
awayMessage = message;
- synchronized (listeners) {
- if (message == null) {
- for (AwayStateListener listener : listeners.get(AwayStateListener.class)) {
- listener.onBack();
- }
- } else {
- for (AwayStateListener listener : listeners.get(AwayStateListener.class)) {
- listener.onAway(message);
+ new Thread(new Runnable() {
+
+ /** {@inheritDoc} */
+ @Override
+ public void run() {
+ synchronized (listeners) {
+ if (message == null) {
+ for (AwayStateListener listener : listeners.get(AwayStateListener.class)) {
+ listener.onBack();
+ }
+ } else {
+ for (AwayStateListener listener : listeners.get(AwayStateListener.class)) {
+ listener.onAway(message);
+ }
+ }
}
}
- }
+ }, "Away state listener runner").start();
}
// </editor-fold>

Issue History

Date Modified Username Field Change
2010-02-07 20:52 Greboid New Issue
2010-02-07 20:52 Greboid Status new => assigned
2010-02-07 20:52 Greboid Assigned To => MD87
2010-02-07 20:52 Greboid Note Added: 0009776
2010-02-08 13:30 MD87 Note Added: 0009786
2010-02-08 13:34 Greboid Note Added: 0009787
2010-02-16 17:51 Version Control Checkin
2010-02-16 17:51 Version Control Note Added: 0009852
2010-02-16 17:51 Version Control Status assigned => fix pending
2010-02-17 02:25 Version Control Checkin
2010-02-17 02:25 Version Control Note Added: 0009880
2010-02-17 02:36 Version Control Checkin
2010-02-17 02:36 Version Control Note Added: 0009885
2010-02-17 02:38 MD87 Checkin
2010-02-17 02:38 MD87 Note Added: 0009888
2010-02-17 02:38 MD87 Status fix pending => resolved
2010-02-17 02:38 MD87 Resolution open => fixed
2010-02-18 20:19 Greboid Status resolved => closed