Browse Source

failtest: fix silent exit when top-level return FAIL_PROBE

We were missing failed tests: if the top-level returns FAIL_PROBE, we would
exit; this should only apply to children.
Rusty Russell 14 years ago
parent
commit
736e586020
1 changed files with 14 additions and 9 deletions
  1. 14 9
      ccan/failtest/failtest.c

+ 14 - 9
ccan/failtest/failtest.c

@@ -362,7 +362,7 @@ static bool should_fail(struct failtest_call *call)
 	struct saved_file *files;
 
 	/* Are we probing? */
-	if (probe_count && --probe_count == 0)
+	if (probe_count && --probe_count == 0 && control_fd != -1)
 		failtest_cleanup(true, 0);
 
 	if (call == &unrecorded_call)
@@ -412,17 +412,22 @@ static bool should_fail(struct failtest_call *call)
 		switch (failtest_hook(history, history_num)) {
 		case FAIL_OK:
 			break;
+		case FAIL_PROBE:
+			/* Already down probe path?  Stop now. */
+			if (!probe_count) {
+				/* FIXME: We should run *parent* and
+				 * run probe until calls match up again. */
+				probe_count = 3;
+				break;
+			} else {
+				/* Child should give up now. */
+				if (control_fd != -1)
+					failtest_cleanup(true, 0);
+				/* Parent, don't fail again. */
+			}
 		case FAIL_DONT_FAIL:
 			call->fail = false;
 			return false;
-		case FAIL_PROBE:
-			/* Already down probe path?  Stop now. */
-			if (probe_count)
-				failtest_cleanup(true, 0);
-			/* FIXME: We should run *parent* and run probe until
-			 * calls match up again. */
-			probe_count = 3;
-			break;
 		default:
 			abort();
 		}