<AWT Dev> EventQueue changes
Artem Ananiev
Artem.Ananiev at Sun.COM
Tue Sep 9 04:55:57 PDT 2008
Hi, AWT team,
there are several issues related to EventQueue class with a long
history. The number of user votes constantly grows, so I think it would
be fine if we can get them fixed in some nearest future.
The list of bugs include (but not limited to):
6424157: java.awt.EventQueue push/pop might cause threading issues
6542185: Threading issues with java.awt.EventQueue.push/pop
(closed as not a defect, but some of described problems still exist)
4913324: Deadlock when using two event queues.
4516924: Request public access to pumpEvents(Conditional) type
functionality.
6727884: Some Uncaught Exceptions are no longer getting sent to the
Uncaught Exception Handlers
Some of the described problems don't look related to each other, however
after a closer look I found they really do. That's why I listed them
here altogether, and would like to discuss some possible improvements:
1. Synchronization changes. Most of the problems with push/pop are
caused by imperfect synchronization in EventQueue. Currently, all the
actions like postEvent() or getNextEvent() are transferred back and
forth in the stack of event queues, and each queue is accessed in its
'synchronized' block. Instead, a single lock looks more correct here.
2. EventDispatchThread lifecycle. It is a known fact, that event
dispatch thread may die for some reason (for example, because of
unhandled exception). When a new event comes, new EDT is created.
Another case when EDT is switched is push/pop methods: when a new EQ is
pushed/popped, a new EDT is created.
I'm sure these changes of current dispatch thread is not what developers
expect. Swing is considered as single-threaded toolkit, but it is really
not...
3. Controllable event pump. This is what developers have been requesting
for at least 8 years. With the current API this task cannot be solved,
and all the external libs like Foxtrot are really just hacks and depend
on JDK internals.
From technical point of view, controllable event pump is just a several
lines of code changes: we only need to make public the code which is
used for modality event pumps.
----
I have a prototype fix with all the three items implemented. Still, it
would be fine to hear what all AWT developers think about proposed changes.
Thanks,
Artem
More information about the awt-dev
mailing list