ccanlint: have valgrind fail with an error, always
authorRusty Russell <rusty@rustcorp.com.au>
Tue, 4 Jan 2011 10:41:47 +0000 (21:11 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 4 Jan 2011 10:41:47 +0000 (21:11 +1030)
The upcoming failtest module can only tell that a child failed when it
exits with a non-zero error.  So we need this, although it means for ccanlint
it still needs to look at output to distinguish a memory leak from a real
error.

tools/ccanlint/tests/run_tests_valgrind.c

index b5e4eff8f881e305d2a53fb7f6b2d0682f69634a..ec3a31981c21f01331fd6d1a934a95f33f452f60 100644 (file)
@@ -108,26 +108,24 @@ static void do_run_tests_vg(struct manifest *m,
                        score->total++;
                        /* FIXME: Valgrind's output sucks.  XML is unreadable by
                         * humans, and you can't have both. */
                        score->total++;
                        /* FIXME: Valgrind's output sucks.  XML is unreadable by
                         * humans, and you can't have both. */
-                       if (run_command(score, timeleft, &cmdout,
-                                       "valgrind -q --leak-check=full"
-                                       " --log-fd=3 %s %s"
-                                       " 3> valgrind.log",
-                                       run_tests_vg.options ?
-                                       run_tests_vg.options : "",
-                                       i->compiled)) {
-                               output = grab_file(i, "valgrind.log", NULL);
-                               if (!output || output[0] == '\0') {
-                                       err = NULL;
-                               } else {
-                                       i->leak_info = get_leaks(output, &err);
-                               }
-                               if (err) {
-                                       score_file_error(score, i, 0, err);
-                               } else
-                                       score->score++;
+                       run_command(score, timeleft, &cmdout,
+                                   "valgrind -q --error-exitcode=101"
+                                   " --leak-check=full"
+                                   " --log-fd=3 %s %s"
+                                   " 3> valgrind.log",
+                                   run_tests_vg.options ?
+                                   run_tests_vg.options : "",
+                                   i->compiled);
+                       output = grab_file(i, "valgrind.log", NULL);
+                       if (!output || output[0] == '\0') {
+                               err = NULL;
                        } else {
                        } else {
-                               score_file_error(score, i, 0, cmdout);
+                               i->leak_info = get_leaks(output, &err);
                        }
                        }
+                       if (err)
+                               score_file_error(score, i, 0, err);
+                       else
+                               score->score++;
                }
        }
 
                }
        }