summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2005-11-03 00:01:06 +0000
committerMark Wielaard <mark@klomp.org>2005-11-03 00:01:06 +0000
commit5b0b9915ec982897797aa86d91292d3bb21046f7 (patch)
treec7e5f2d539dc2aae2a3f6bb636061b9c4651bd9d
parente380fcd13d5c4c52610f72fb62aa5f6a4137e110 (diff)
downloadclasspath-5b0b9915ec982897797aa86d91292d3bb21046f7.tar.gz
* javax/swing/Timer.java (Waker.run): Synchronize on queueLock and use
queueLock.wait(), not Thread.sleep(). (start): Synchronize on queueLock and check whether waker is null. (stop): Synchronize on queueLock and notifyAll().
-rw-r--r--ChangeLog7
-rw-r--r--javax/swing/Timer.java75
2 files changed, 50 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index 6047ee756..46abde4f8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2005-11-02 Mark Wielaard <mark@klomp.org>
+ * javax/swing/Timer.java (Waker.run): Synchronize on queueLock and use
+ queueLock.wait(), not Thread.sleep().
+ (start): Synchronize on queueLock and check whether waker is null.
+ (stop): Synchronize on queueLock and notifyAll().
+
+2005-11-02 Mark Wielaard <mark@klomp.org>
+
* configure.ac: Set version to 0.19.
* NEWS: Add date of release.
diff --git a/javax/swing/Timer.java b/javax/swing/Timer.java
index b55465db5..ec8a29275 100644
--- a/javax/swing/Timer.java
+++ b/javax/swing/Timer.java
@@ -65,43 +65,50 @@ public class Timer
*/
public void run()
{
- running = true;
try
{
- try
- {
- sleep(initialDelay);
- }
- catch (InterruptedException e)
+ synchronized (queueLock)
{
+ try
+ {
+ queueLock.wait(initialDelay);
+ }
+ catch (InterruptedException e)
+ {
+ // Ignored
+ }
+
if (!running)
return;
- }
- queueEvent();
+ queueEvent();
- if (repeats)
- while (running)
- {
- try
- {
- sleep(delay);
- }
- catch (InterruptedException e)
+ if (repeats)
+ while (running)
{
+ try
+ {
+ queueLock.wait(delay);
+ }
+ catch (InterruptedException e)
+ {
+ // Ignored
+ }
+
if (!running)
break;
- }
- queueEvent();
- if (logTimers)
- System.out.println("javax.swing.Timer -> clocktick");
+ queueEvent();
- if ( ! repeats)
- break;
- }
- running = false;
- }
+ if (logTimers)
+ System.out.println("javax.swing.Timer -> clocktick");
+
+ if (!repeats)
+ break;
+ }
+ running = false;
+ }
+ }
finally
{
// The timer is no longer running.
@@ -408,10 +415,13 @@ public class Timer
*/
public void start()
{
- if (isRunning())
- return;
- waker = new Waker();
- waker.start();
+ synchronized (queueLock)
+ {
+ if (waker != null)
+ return;
+ waker = new Waker();
+ waker.start();
+ }
}
/**
@@ -419,12 +429,13 @@ public class Timer
*/
public void stop()
{
- running = false;
- if (waker != null)
- waker.interrupt();
synchronized (queueLock)
{
+ running = false;
queue = 0;
+ if (waker != null)
+ queueLock.notifyAll();
+ waker = null;
}
}