From: Fernando Nasser Date: Fri, 16 Jan 2004 16:15:49 +0000 (+0000) Subject: EventDispatchThread.java (run): Stop running when interrupted. X-Git-Tag: releases/gcc-3.4.0~911 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=101900aa2885d08ceff3035eb1ece524222f573f;p=thirdparty%2Fgcc.git EventDispatchThread.java (run): Stop running when interrupted. * java/awt/EventDispatchThread.java (run): Stop running when interrupted. * java/awt/EventQueue.java (pop): Stop dispatch thread when done. Reset the queue after transferring its contents. (push): Start a new dispatch thread if none is running. From-SVN: r75977 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index a19a55c4a73f..c16a006c96b9 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,11 @@ +2004-01-16 Fernando Nasser + + * java/awt/EventDispatchThread.java (run): Stop running when + interrupted. + * java/awt/EventQueue.java (pop): Stop dispatch thread when done. + Reset the queue after transferring its contents. + (push): Start a new dispatch thread if none is running. + 2004-01-16  Olga Rodimina * gnu/java/awt/peer/gtk/GdkGraphics2D.java: diff --git a/libjava/java/awt/EventDispatchThread.java b/libjava/java/awt/EventDispatchThread.java index 6e0e875abb5f..91145e1bb48a 100644 --- a/libjava/java/awt/EventDispatchThread.java +++ b/libjava/java/awt/EventDispatchThread.java @@ -62,8 +62,18 @@ class EventDispatchThread extends Thread try { AWTEvent evt = queue.getNextEvent(); + if (isInterrupted ()) + { + // We are interrupted when we should finish executing + return; + } queue.dispatchEvent(evt); } + catch (InterruptedException ie) + { + // We are interrupted when we should finish executing + return; + } catch (Throwable x) { System.err.println("Exception during event dispatch:"); diff --git a/libjava/java/awt/EventQueue.java b/libjava/java/awt/EventQueue.java index d20edbc13b06..fe9138fa3f76 100644 --- a/libjava/java/awt/EventQueue.java +++ b/libjava/java/awt/EventQueue.java @@ -301,8 +301,8 @@ public class EventQueue /** * Allows a custom EventQueue implementation to replace this one. * All pending events are transferred to the new queue. Calls to postEvent, - * getNextEvent, and peekEvent are forwarded to the pushed queue until it - * is removed with a pop(). + * getNextEvent, and peekEvent and others are forwarded to the pushed queue + * until it is removed with a pop(). * * @exception NullPointerException if newEventQueue is null. */ @@ -320,6 +320,10 @@ public class EventQueue return; } + /* Make sure we have a live dispatch thread to drive the queue */ + if (dispatchThread == null) + dispatchThread = new EventDispatchThread(this); + int i = next_out; while (i != next_in) { @@ -361,6 +365,13 @@ public class EventQueue if (++i == queue.length) i = 0; } + // Empty the queue so it can be reused + next_in = 0; + next_out = 0; + + // Tell our EventDispatchThread that it can end execution + dispatchThread.interrupt (); + dispatchThread = null; } }