diff --git a/tools/packaging/test262.py b/tools/packaging/test262.py
index 1192005fc9674c901933b312c3439e51efb21429..735d796cac7f760bedccea2ee88949714266003e 100755
--- a/tools/packaging/test262.py
+++ b/tools/packaging/test262.py
@@ -583,6 +583,7 @@ class TestSuite(object):
           SkipCaseElement.append(SkipElement)
           TestSuiteElement.append(SkipCaseElement)
 
+    threads = []
     if workers_count > 1:
       pool_sem = threading.Semaphore(workers_count)
       log_lock = threading.Lock()
@@ -605,19 +606,22 @@ class TestSuite(object):
           if logname:
             self.WriteLog(result)
         finally:
+          progress.HasRun(result)
+
           if workers_count > 1:
             log_lock.release()
 
-        progress.HasRun(result)
       if workers_count == 1:
         exec_case()
       else:
         pool_sem.acquire()
-        threading.Thread(target=exec_case).start()
+        thread = threading.Thread(target=exec_case)
+        threads.append(thread)
+        thread.start()
         pool_sem.release()
 
-    if workers_count > 1:
-      log_lock.acquire()
+    for thread in threads:
+      thread.join()
 
     if print_summary:
       self.PrintSummary(progress, logname)
@@ -628,9 +632,6 @@ class TestSuite(object):
         print "Use --full-summary to see output from failed tests"
     print
 
-    if workers_count > 1:
-      log_lock.release()
-
     return progress.failed
 
   def WriteLog(self, result):