diff options
author | Mark Wielaard <mark@klomp.org> | 2005-11-03 00:01:06 +0000 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2005-11-03 00:01:06 +0000 |
commit | 5b0b9915ec982897797aa86d91292d3bb21046f7 (patch) | |
tree | c7e5f2d539dc2aae2a3f6bb636061b9c4651bd9d | |
parent | e380fcd13d5c4c52610f72fb62aa5f6a4137e110 (diff) | |
download | classpath-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-- | ChangeLog | 7 | ||||
-rw-r--r-- | javax/swing/Timer.java | 75 |
2 files changed, 50 insertions, 32 deletions
@@ -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; } } |