src/share/classes/java/awt/EventQueue.java

Print this page

        

@@ -37,16 +37,15 @@
 
 import java.util.EmptyStackException;
 import sun.util.logging.PlatformLogger;
 
 import sun.awt.AppContext;
-import sun.awt.AWTAccessor;
 import sun.awt.AWTAutoShutdown;
-import sun.awt.AWTInterruptedException;
 import sun.awt.PeerEvent;
 import sun.awt.SunToolkit;
 import sun.awt.EventQueueItem;
+import sun.awt.AWTAccessor;
 
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.atomic.AtomicInteger;
 

@@ -1037,21 +1036,19 @@
          * be valid at that point.
          */
         pushPopLock.lock();
         try {
             if (edt == dispatchThread) {
-                if (peekEvent() != null || !SunToolkit.isPostEventQueueEmpty()) {
-                    if (!forceDetach) {
                         /*
+                 * Don't detach the thread if any events are pending. Not
+                 * sure if it's a possible scenario, though.
+                 *
                          * Fix for 4648733. Check both the associated java event
                          * queue and the PostEventQueue.
                          */
+                if (!forceDetach && (peekEvent() != null) || !SunToolkit.isPostEventQueueEmpty()) {
                         return false;
-                    } else {
-                        // 7162144 - derail pending events
-                        removeAllEvents();
-                    }
                 }
                 dispatchThread = null;
             }
             AWTAutoShutdown.getInstance().notifyThreadFree(edt);
             return true;

@@ -1129,43 +1126,10 @@
         } finally {
             pushPopLock.unlock();
         }
     }
 
-    private void removeAllEvents() {
-        SunToolkit.flushPendingEvents();
-        pushPopLock.lock();
-        try {
-            for (int i = 0; i < NUM_PRIORITIES; i++) {
-                EventQueueItem entry = queues[i].head;
-                EventQueueItem prev = null;
-                while (entry != null) {
-                    if (entry.event instanceof InvocationEvent) {
-                        AWTAccessor.getInvocationEventAccessor().
-                            dispose((InvocationEvent)entry.event);
-                    }
-                    if (entry.event instanceof SequencedEvent) {
-                        ((SequencedEvent)entry.event).dispose();
-                    }
-                    if (entry.event instanceof SentEvent) {
-                        ((SentEvent)entry.event).dispose();
-                    }
-                    if (prev == null) {
-                        queues[i].head = entry.next;
-                    } else {
-                        prev.next = entry.next;
-                    }
-                    uncacheEQItem(entry);
-                    entry = entry.next;
-                }
-                queues[i].tail = prev;
-            }
-        } finally {
-            pushPopLock.unlock();
-        }
-    }
-
     static void setCurrentEventAndMostRecentTime(AWTEvent e) {
         Toolkit.getEventQueue().setCurrentEventAndMostRecentTimeImpl(e);
     }
     private void setCurrentEventAndMostRecentTimeImpl(AWTEvent e) {
         pushPopLock.lock();

@@ -1269,17 +1233,13 @@
             }
         }
 
         Throwable eventThrowable = event.getThrowable();
         if (eventThrowable != null) {
-            if (eventThrowable instanceof AWTInterruptedException) {
-                throw new InterruptedException(eventThrowable.getMessage());
-            } else {
                 throw new InvocationTargetException(eventThrowable);
             }
         }
-    }
 
     /*
      * Called from PostEventQueue.postEvent to notify that a new event
      * appeared. First it proceeds to the EventQueue on the top of the
      * stack, then notifies the associated dispatch thread if it exists