From 48cbf2cf184a1ac29931f2370f494b22832556c3 Mon Sep 17 00:00:00 2001
From: Daniel Brown <ddb@star.sr.bham.ac.uk>
Date: Tue, 30 Jul 2013 11:56:44 +0100
Subject: [PATCH] watcher thread now start the test thread when ready, stops
 the watcher trying to join the test thread before it is ready

---
 pykat/testing/web/web_interface.py | 61 +++++++++++++++---------------
 setup.py                           |  2 +-
 2 files changed, 32 insertions(+), 31 deletions(-)

diff --git a/pykat/testing/web/web_interface.py b/pykat/testing/web/web_interface.py
index 20a9052..fd0f9ce 100644
--- a/pykat/testing/web/web_interface.py
+++ b/pykat/testing/web/web_interface.py
@@ -39,35 +39,37 @@ class FinesseProcessWatcher(Thread):
         self.process_to_watch = process
         
     def run(self):
-        global schedule_lock,current_test,scheduled_tests, watcher
-        
-        if self.process_to_watch is None:
-            return
-        
-        #if type(self.process_to_watch) is not finesse_test.FinesseTestProcess:
-        #    raise Exception("Tried to watch something which wasn't a FinesseTestProcess")
-    
-        print "Watcher is watching", self.process_to_watch
-    
-        self.process_to_watch.join()
-        
-        print "Watcher is continuing"
-        
-        # once done check if any other tests need to be ran
-        schedule_lock.acquire()
+        try:
+            global schedule_lock,current_test,scheduled_tests, watcher
+            
+            if self.process_to_watch is None:
+                return
+            
+            #if type(self.process_to_watch) is not finesse_test.FinesseTestProcess:
+            #    raise Exception("Tried to watch something which wasn't a FinesseTestProcess")
         
-        if len(scheduled_tests) > 0:
-            print "Watcher starting next test"
-            current_test = scheduled_tests.pop(0)
-            watcher = FinesseProcessWatcher()
-            watcher.setProcessToWatch(current_test)
-            watcher.start()
-            current_test.start()
-        else:
-            print "Watcher found no more tests to run"
-            current_test = None
+            print "Watcher is watching", self.process_to_watch
+            self.process_to_watch.start()
+            self.process_to_watch.join()
+            print "Watcher is continuing"
+            
+        try:
+            # once done check if any other tests need to be ran
+            schedule_lock.acquire()
         
-        schedule_lock.release()
+            if len(scheduled_tests) > 0:
+                print "Watcher starting next test"
+                current_test = scheduled_tests.pop(0)
+                watcher = FinesseProcessWatcher()
+                watcher.setProcessToWatch(current_test)
+                watcher.start()
+            else:
+                print "Watcher found no more tests to run"
+                current_test = None
+                watcher = None
+        finally:
+            schedule_lock.release()
+                
 
 @app.route('/finesse/cancel_test_<id>', methods=["POST"])
 def finesse_cancel_test(id):
@@ -150,12 +152,11 @@ def finesse_start_test():
         if current_test is None:
             print "running test"
             current_test = test
+            # create watcher thread which will start the test
+            # when ready
             watcher = FinesseProcessWatcher()
             watcher.setProcessToWatch(test)
             watcher.start()
-            
-            test.start()
-            
         else:
             print "queuing test"
             scheduled_tests.append(test)
diff --git a/setup.py b/setup.py
index 3e27ce1..f16d437 100644
--- a/setup.py
+++ b/setup.py
@@ -11,7 +11,7 @@ REQUIREMENTS = [i.strip() for i in open("requirements.txt").readlines()]
 
 setup(
     name='PyKat',
-    version='0.0.2',
+    version='0.0.3',
     author='Daniel Brown',
     author_email='ddb@star.sr.bham.ac.uk',
     packages=['pykat','pykat.gui','pykat.gui.resources'],
-- 
GitLab