X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ffailtest%2Ffailtest.c;h=7d842d80fd035c9331ff7819c38906d30804aff3;hp=9972db3cd29fc8ad83a9d3c51bc8fedf65ef4a76;hb=98ba6e4755c71587feffeacf43f996a22a8e0689;hpb=c9f915e02c760caffe75da7f9a6a9a1de1bf1747 diff --git a/ccan/failtest/failtest.c b/ccan/failtest/failtest.c index 9972db3c..7d842d80 100644 --- a/ccan/failtest/failtest.c +++ b/ccan/failtest/failtest.c @@ -219,7 +219,7 @@ static void trace_str(const char *str) { ssize_t ret; - while ((ret = write(tracefd, str, strlen(str))) <= 0) { + while ((ret = write(tracefd, str, strlen(str))) > 0) { str += ret; if (!*str) return; @@ -317,21 +317,28 @@ static NORETURN void failtest_cleanup(bool forced_cleanup, int status) { int i; + /* For children, we don't care if they "failed" the testing. */ + if (control_fd != -1) + status = 0; + if (forced_cleanup) history_num--; /* Cleanup everything, in reverse order. */ - for (i = history_num - 1; i >= 0; i--) - if (history[i].cleanup) - history[i].cleanup(&history[i].u); + for (i = history_num - 1; i >= 0; i--) { + if (!history[i].cleanup) + continue; + if (!forced_cleanup) { + printf("Leak at %s:%u\n", + history[i].file, history[i].line); + status = 1; + } + history[i].cleanup(&history[i].u); + } free_everything(); - - if (control_fd == -1) - exit(status); - tell_parent(SUCCESS); - exit(0); + exit(status); } static bool should_fail(struct failtest_call *call)