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

Reply via email to