diff --git a/tests/gem_flink_race.c b/tests/gem_flink_race.c index 47544bd0..612f39eb 100644 --- a/tests/gem_flink_race.c +++ b/tests/gem_flink_race.c @@ -24,6 +24,7 @@ * Daniel Vetter */ +#define _GNU_SOURCE #include #include #include @@ -31,6 +32,7 @@ #include #include #include +#include #include "drmtest.h" #include "i915_drm.h" @@ -64,15 +66,35 @@ static void *thread_fn(void *p) return (void *)0; } +static int get_object_count(const char *path) +{ + FILE *file; + int ret, scanned; + file = fopen(path, "r"); + + scanned = fscanf(file, "%i objects,", &ret); + assert(scanned == 1); + + return ret; +} + int main(int argc, char **argv) { int num_threads; pthread_t *threads; int r, i; void *status; + int device = drm_get_card(0); + int old_object_count, new_object_count; + char *path; drmtest_skip_on_simulation(); + r = asprintf(&path, "/sys/kernel/debug/dri/%d/i915_gem_objects", device); + assert(r != -1); + + old_object_count = get_object_count(path); + num_threads = sysconf(_SC_NPROCESSORS_ONLN) - 1; if (!num_threads) num_threads = 1; @@ -109,5 +131,9 @@ int main(int argc, char **argv) close(fd); - return 0; + new_object_count = get_object_count(path); + + printf("leaked %d objects\n", new_object_count - old_object_count); + + return new_object_count - old_object_count > 0 ? 1 : 0; }