regrtest: don't fail immediately if a child does crash

Issue #29362: Catch a crash of a worker process as a normal failure and
continue to run next tests. It allows to get the usual test summary: single
line result (OK/FAIL), total duration, etc.
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 61a9876..de1f4f9 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -107,7 +107,7 @@
             self.test_times.append((test_time, test))
         if ok == PASSED:
             self.good.append(test)
-        elif ok == FAILED:
+        elif ok in (FAILED, CHILD_ERROR):
             self.bad.append(test)
         elif ok == ENV_CHANGED:
             self.environment_changed.append(test)
diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py
index 74ac4fa..34b3ae6 100644
--- a/Lib/test/libregrtest/runtest_mp.py
+++ b/Lib/test/libregrtest/runtest_mp.py
@@ -129,7 +129,7 @@
             result = (CHILD_ERROR, "Exit code %s" % retcode)
             self.output.put((test, stdout.rstrip(), stderr.rstrip(),
                              result))
-            return True
+            return False
 
         if not result:
             self.output.put((None, None, None, None))
@@ -203,6 +203,8 @@
                 and test_time >= PROGRESS_MIN_TIME
                 and not regrtest.ns.pgo):
                 text += ' (%.0f sec)' % test_time
+            elif ok == CHILD_ERROR:
+                text = '%s (%s)' % (text, test_time)
             running = get_running(workers)
             if running and not regrtest.ns.pgo:
                 text += ' -- running: %s' % ', '.join(running)
@@ -216,9 +218,6 @@
 
             if result[0] == INTERRUPTED:
                 raise KeyboardInterrupt
-            if result[0] == CHILD_ERROR:
-                msg = "Child error on {}: {}".format(test, result[1])
-                raise Exception(msg)
             test_index += 1
     except KeyboardInterrupt:
         regrtest.interrupted = True