Title: [PATCH] bug fixes on FIFONotifier and alarm

After diving a while with the Alarm and FIFONotifier classes in the sandobx-threading project I found two bugs.

In the first the Alarm needs to synchronize itself to wait

In the second FIFONotifier doesn't starts itself. Also added a safety check in the start method

Index: Alarm.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-commons-sandbox/threading/src/java/org/apache/commons/threading/Alarm.java,v

retrieving revision 1.1.1.1
diff -u -r1.1.1.1 Alarm.java
--- Alarm.java  2001/04/15 00:50:57     1.1.1.1
+++ Alarm.java  2001/05/10 15:55:28
@@ -478,8 +478,8 @@
            thread.start();
 
        }
-           
 
+
     }
 
 
@@ -513,6 +513,7 @@
      */
     public void run() {
 
+
        // Record starting time and fire the STARTED event
        started = System.currentTimeMillis();
        publisher.send(new AlarmEvent(this, STARTED,
@@ -521,7 +522,9 @@
        // Loop for each wait for the timer to expire
        while (true) {
            try {
-               wait(timeout);
+          synchronized (this) {
+                 wait(timeout);
+          }
                publisher.send(new AlarmEvent(this, EXPIRED,
                                              System.currentTimeMillis()));
                if (mode != CONTINUOUS) {
Index: FIFONotifier.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-commons-sandbox/threading/src/java/org/apache/commons/threading/FIFONotifier.java,v

retrieving revision 1.2
diff -u -r1.2 FIFONotifier.java
--- FIFONotifier.java   2001/05/06 16:50:22     1.2
+++ FIFONotifier.java   2001/05/10 15:53:07
@@ -134,9 +134,9 @@
     public FIFONotifier(ThreadGroup group, String name) {
 
        if (group == null) {
-           thread = new Thread(name);
+           thread = new Thread(this, name);
        } else {
-           thread = new Thread(group, name);
+           thread = new Thread(group, this, name);
        }
        thread.setDaemon(true);
         thread.start();
@@ -211,7 +211,9 @@
      */
     public void start() {
 
+      if (thread.isAlive()) {
         thread.start();
+      }
 
     }
 

Reply via email to