[7u10] Review request for 7188708 - REGRESSION: closed/java/awt/EventQueue/PostEventOrderingTest.java fails
David Holmes
david.holmes at oracle.com
Fri Sep 7 04:36:10 PDT 2012
Hi Oleg,
It seems to me that the original code has the
isFlushingPendingEvents = false;
in the wrong place: it should only ever be cleared by an invocation that
set it. So a simple reorganization of the code would achieve that:
553 public static void flushPendingEvents() {
554 flushLock.lock();
555 try {
556 // Don't call flushPendingEvents() recursively
557 if (!isFlushingPendingEvents) {
558 isFlushingPendingEvents = true;
+ try {
559 AppContext appContext = AppContext.getAppContext();
560 PostEventQueue postEventQueue =
561
(PostEventQueue)appContext.get(POST_EVENT_QUEUE_KEY);
562 if (postEventQueue != null) {
563 postEventQueue.flush();
564 }
+ } finally {
+ isFlushingPendingEvents = false;
+ }
565 }
566 } finally {
-567
568 flushLock.unlock();
569 }
570 }
David
-----
On 7/09/2012 11:57 AM, Oleg Pekhovskiy wrote:
> Hi!
>
> Please review the fix for CR:
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7188708
>
> Webrev:
> http://cr.openjdk.java.net/~bagiras/7u10/7188708.1/
>
> The reason is that isFlushingPendingEvents in
> SunToolkit.flushPendingEvents() is reset
> after the first recursive call of flushPendingEvents(). Thus, if there
> are several pending events in PostEventQueue,
> recursion would be rejected only for the first event, allowing nested
> call of PostEventQueue.flush() after.
>
> To resolve the problem I added the counter "flushNestingLevel" instead
> of the flag "isFlushingPendingEvents".
> It's increased each time entering SunToolkit.flushPendingEvents() and
> decreased on exit.
> So, PostEventQueue.flush() method is called only when we enter
> SunToolkit.flushPendingEvents() for the first time
> within one thread.
>
> That fix was prepared ONLY for 7u10.
> For JDK 8 the fix for "CR7186109 - Simplify lock machinery for
> PostEventQueue & EventQueue" should cover this case.
>
> Thanks,
> Oleg
More information about the jdk7u-dev
mailing list