<AWT Dev> [7u8] Review request for 7177040: Deadlock between PostEventQueue.noEvents, EventQueue.isDispatchThread and SwingUtilities.invokeLater

Oleg Pekhovskiy oleg.pekhovskiy at oracle.com
Thu Jul 26 06:59:47 PDT 2012


Hi David,

it's thread-safe indirectly. SunToolkit.flushPendingEvents() & 
SunToolkitSubclass.flushPendingEvents() are the only methods that call 
PostEventQueue.flush().
They both have flushLock synchronization object that guarantees 
synchronized call of PostEventQueue.flush().

Thanks,
Oleg

7/26/2012 4:08 PM, David Holmes wrote:
> This fix still makes me uncomfortable because flush() is not 
> thread-safe any more. If two threads can flush() then the first can 
> clear the isFlushing state (in the finally block) that has been set by 
> the second (in the synchronized block).
>
> David
>
> On 24/07/2012 9:42 PM, Peter Levart wrote:
>> Hi Oleg,
>>
>> This is just cosmetics, but:
>>
>> SunToolkit:
>> public synchronized boolean noEvents() {
>>          return queueHead == null && !isFlushing;
>>      }
>>
>> ... a thread calling noEvents could see occasional "spikes" of false
>> return even though there is no flushing being performed (when other
>> thread is calling flush on an empty PostEventQueue).
>>
>> Improved flush method would look like this:
>>
>>      public void flush() {
>>          EventQueueItem tempQueue;
>>          synchronized (this) {
>>              tempQueue = queueHead;
>>              queueHead = queueTail = null;
>>              isFlushing =*/(tempQueue != null)/*;
>>
>>          }
>>          try {
>>              while (tempQueue != null) {
>>                  eventQueue.postEvent(tempQueue.event);
>>                  tempQueue = tempQueue.next;
>>              }
>>          }
>>          finally {
>>              isFlushing = false;
>>          }
>>      }
>>
>>
>> Regards, Peter
>>
>> 2012/7/23 Oleg Pekhovskiy <oleg.pekhovskiy at oracle.com
>> <mailto:oleg.pekhovskiy at oracle.com>>
>>
>>     Hi!
>>
>>     Please review this back-port being already pushed to jdk8 but
>>     deferred for 7u6.
>>
>>     Bug:
>>     http://bugs.sun.com/view_bug.__do?bug_id=7177040
>> <http://bugs.sun.com/view_bug.do?bug_id=7177040>
>>
>>     Webrev:
>>     http://cr.openjdk.java.net/~__bagiras/7u8/7177040.1
>> <http://cr.openjdk.java.net/~bagiras/7u8/7177040.1>
>>
>>     Review thread for 7u6:
>>     
>> http://mail.openjdk.java.net/__pipermail/awt-dev/2012-July/__003106.html
>> <http://mail.openjdk.java.net/pipermail/awt-dev/2012-July/003106.html>
>>
>>     Reviewers 7u6 & 8:
>>     Anthony Petrov, Anton Tarasov
>>
>>     Thanks,
>>     Oleg
>>
>>




More information about the awt-dev mailing list