aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFernando Nasser <fnasser@redhat.com>2004-01-16 16:15:49 +0000
committerFernando Nasser <fnasser@gcc.gnu.org>2004-01-16 16:15:49 +0000
commit101900aa2885d08ceff3035eb1ece524222f573f (patch)
tree23d41a020b7d3f81a3015111bd82e8f4e329bb48
parent5ed5fd905c6fd33256c0a64f5913d4064bc5eccd (diff)
downloadgcc-101900aa2885d08ceff3035eb1ece524222f573f.zip
gcc-101900aa2885d08ceff3035eb1ece524222f573f.tar.gz
gcc-101900aa2885d08ceff3035eb1ece524222f573f.tar.bz2
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
-rw-r--r--libjava/ChangeLog8
-rw-r--r--libjava/java/awt/EventDispatchThread.java10
-rw-r--r--libjava/java/awt/EventQueue.java15
3 files changed, 31 insertions, 2 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index a19a55c..c16a006 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,11 @@
+2004-01-16 Fernando Nasser <fnasser@redhat.com>
+
+ * 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 <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
diff --git a/libjava/java/awt/EventDispatchThread.java b/libjava/java/awt/EventDispatchThread.java
index 6e0e875..91145e1 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 d20edbc..fe9138f 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;
}
}