diff --git a/green/runner.py b/green/runner.py
index <HASH>..<HASH> 100644
--- a/green/runner.py
+++ b/green/runner.py
@@ -83,6 +83,8 @@ class GreenTestRunner():
                         # This blocks until the worker who is processing this
                         # particular test actually finishes
                         result.addProtoTestResult(async_response.get())
+                pool.terminate()
+                pool.join()
 
             result.stopTestRun()
 
diff --git a/green/test/test_runner.py b/green/test/test_runner.py
index <HASH>..<HASH> 100644
--- a/green/test/test_runner.py
+++ b/green/test/test_runner.py
@@ -120,12 +120,7 @@ class TestSubprocesses(unittest.TestCase):
         os.chdir(self.startdir)
         # On windows, the subprocesses block access to the files while
         # they take a bit to clean themselves up.
-        for i in range(20):
-            try:
-                shutil.rmtree(self.tmpdir)
-                break
-            except PermissionError:
-                time.sleep(.01)
+        shutil.rmtree(self.tmpdir)
         del(self.stream)
Explicitly terminating and joining pools after we have finished, which makes it much easier to clean up after unit tests that exercise subprocesses on Windows.