test-runner: move leak checking into function

1) now we can use it in the test-compositor
2) it looks better

Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
Marek Chalupa 2014-12-19 14:53:00 +01:00 committed by Daniel Stone
parent 6197f32cad
commit d8e72f98f2
2 changed files with 41 additions and 19 deletions

View file

@ -149,15 +149,41 @@ sigalrm_handler(int signum)
abort(); abort();
} }
int
get_current_alloc_num(void)
{
return num_alloc;
}
void
check_leaks(int supposed_alloc, int supposed_fds)
{
int num_fds;
if (leak_check_enabled) {
if (supposed_alloc != num_alloc) {
fprintf(stderr, "Memory leak detected in test. "
"Allocated %d blocks, unfreed %d\n", num_alloc,
num_alloc - supposed_alloc);
abort();
}
num_fds = count_open_fds();
if (supposed_fds != num_fds) {
fprintf(stderr, "fd leak detected in test. "
"Opened %d files, unclosed %d\n", num_fds,
num_fds - supposed_fds);
abort();
}
}
}
static void static void
run_test(const struct test *t) run_test(const struct test *t)
{ {
int cur_alloc = num_alloc; int cur_alloc, cur_fds;
int cur_fds, num_fds;
struct sigaction sa; struct sigaction sa;
cur_fds = count_open_fds();
if (timeouts_enabled) { if (timeouts_enabled) {
sa.sa_handler = sigalrm_handler; sa.sa_handler = sigalrm_handler;
sa.sa_flags = 0; sa.sa_flags = 0;
@ -165,27 +191,17 @@ run_test(const struct test *t)
assert(sigaction(SIGALRM, &sa, NULL) == 0); assert(sigaction(SIGALRM, &sa, NULL) == 0);
} }
cur_alloc = get_current_alloc_num();
cur_fds = count_open_fds();
t->run(); t->run();
/* turn off timeout (if any) after test completition */ /* turn off timeout (if any) after test completition */
if (timeouts_enabled) if (timeouts_enabled)
alarm(0); alarm(0);
if (leak_check_enabled) { check_leaks(cur_alloc, cur_fds);
if (cur_alloc != num_alloc) {
fprintf(stderr, "Memory leak detected in test. "
"Allocated %d blocks, unfreed %d\n", num_alloc,
num_alloc - cur_alloc);
abort();
}
num_fds = count_open_fds();
if (cur_fds != num_fds) {
fprintf(stderr, "fd leak detected in test. "
"Opened %d files, unclosed %d\n", num_fds,
num_fds - cur_fds);
abort();
}
}
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }

View file

@ -39,6 +39,12 @@ count_open_fds(void);
void void
exec_fd_leak_check(int nr_expected_fds); /* never returns */ exec_fd_leak_check(int nr_expected_fds); /* never returns */
int
get_current_alloc_num(void);
void
check_leaks(int supposed_allocs, int supposed_fds);
/* /*
* set/reset the timeout in seconds. The timeout starts * set/reset the timeout in seconds. The timeout starts
* at the point of invoking this function * at the point of invoking this function