validate: launcher: Force kill subprocess when done with them
authorThibault Saunier <tsaunier@gnome.org>
Mon, 8 Dec 2014 13:37:15 +0000 (14:37 +0100)
committerThibault Saunier <tsaunier@gnome.org>
Mon, 8 Dec 2014 15:19:20 +0000 (16:19 +0100)
Making sure that we do not end up having spurious subprocess around

validate/launcher/baseclasses.py

index cfe6fbf731ec8babb02a6672d135e6f8681b3f7e..70799429d5df1aac2d2d28e0a0ad3df212fe64e5 100644 (file)
@@ -216,6 +216,25 @@ class Test(Loggable):
     def get_subproc_env(self):
         return os.environ
 
+    def _kill_subprocess(self):
+        if self.process is None:
+            return
+
+        stime = time.time()
+        res = self.process.poll()
+        while res is None:
+            try:
+                self.debug("Subprocess is still alive, sending KILL signal")
+                self.process.send_signal(signal.SIGKILL)
+                time.sleep(1)
+            except OSError:
+                pass
+            if time.time() - stime > DEFAULT_TIMEOUT:
+                raise RuntimeError("Could not kill subprocess after %s second"
+                                   " Something is really wrong, => EXITING"
+                                   % DEFAULT_TIMEOUT)
+            res = self.process.poll()
+
     def run(self):
         self.command = "%s " % (self.application)
         self._starting_time = time.time()
@@ -241,14 +260,10 @@ class Test(Loggable):
                                             env=proc_env)
             self.wait_process()
         except KeyboardInterrupt:
-            self.process.send_signal(signal.SIGINT)
+            self._kill_subprocess()
             raise
 
-        try:
-            self.process.send_signal(signal.SIGINT)
-        except OSError:
-            pass
-
+        self._kill_subprocess()
         self.time_taken = time.time() - self._starting_time
 
         if not self.reporter.uses_standard_output():