src/share/classes/sun/awt/SunToolkit.java

Print this page

        

*** 542,560 **** } }, PeerEvent.ULTIMATE_PRIORITY_EVENT); postEvent(targetToAppContext(e.getSource()), pe); } - protected static final Lock flushLock = new ReentrantLock(); private static boolean isFlushingPendingEvents = false; /* * Flush any pending events which haven't been posted to the AWT * EventQueue yet. */ public static void flushPendingEvents() { - flushLock.lock(); try { // Don't call flushPendingEvents() recursively if (!isFlushingPendingEvents) { isFlushingPendingEvents = true; AppContext appContext = AppContext.getAppContext(); --- 542,558 ----
*** 564,585 **** postEventQueue.flush(); } } } finally { isFlushingPendingEvents = false; - flushLock.unlock(); - } - } - - public static boolean isPostEventQueueEmpty() { - AppContext appContext = AppContext.getAppContext(); - PostEventQueue postEventQueue = - (PostEventQueue)appContext.get(POST_EVENT_QUEUE_KEY); - if (postEventQueue != null) { - return postEventQueue.noEvents(); - } else { - return true; } } /* * Execute a chunk of code on the Java event handler thread for the --- 562,571 ----
*** 2110,2156 **** class PostEventQueue { private EventQueueItem queueHead = null; private EventQueueItem queueTail = null; private final EventQueue eventQueue; - // For the case when queue is cleared but events are not posted - private volatile boolean isFlushing = false; - PostEventQueue(EventQueue eq) { eventQueue = eq; } - public synchronized boolean noEvents() { - return queueHead == null && !isFlushing; - } - /* * Continually post pending AWTEvents to the Java EventQueue. The method * is synchronized to ensure the flush is completed before a new event * can be posted to this queue. * * 7177040: The method couldn't be wholly synchronized because of calls * of EventQueue.postEvent() that uses pushPopLock, otherwise it could * potentially lead to deadlock */ ! public void flush() { ! EventQueueItem tempQueue; ! synchronized (this) { ! tempQueue = queueHead; queueHead = queueTail = null; - isFlushing = true; - } - try { while (tempQueue != null) { eventQueue.postEvent(tempQueue.event); tempQueue = tempQueue.next; } } - finally { - isFlushing = false; - } - } /* * Enqueue an AWTEvent to be posted to the Java EventQueue. */ void postEvent(AWTEvent event) { --- 2096,2126 ---- class PostEventQueue { private EventQueueItem queueHead = null; private EventQueueItem queueTail = null; private final EventQueue eventQueue; PostEventQueue(EventQueue eq) { eventQueue = eq; } /* * Continually post pending AWTEvents to the Java EventQueue. The method * is synchronized to ensure the flush is completed before a new event * can be posted to this queue. * * 7177040: The method couldn't be wholly synchronized because of calls * of EventQueue.postEvent() that uses pushPopLock, otherwise it could * potentially lead to deadlock */ ! public synchronized void flush() { ! EventQueueItem tempQueue = queueHead; queueHead = queueTail = null; while (tempQueue != null) { eventQueue.postEvent(tempQueue.event); tempQueue = tempQueue.next; } } /* * Enqueue an AWTEvent to be posted to the Java EventQueue. */ void postEvent(AWTEvent event) {