Synopsis - Cross-Reference
File: /src/Synopsis/gc/tests/thread_leak_test.c1#ifndef GC_THREADS 2# define GC_THREADS 3#endif /* GC_THREADS */ 4#include "leak_detector.h" 5#include <pthread.h> 6#include <stdio.h> 7 8void * test(void * arg) { 9 int *p[10]; 10 int i; 11 GC_find_leak = 1; /* for new collect versions not compiled */ 12 /* with -DFIND_LEAK. */ 13 for (i = 0; i < 10; ++i) { 14 p[i] = malloc(sizeof(int)+i); 15 } 16 CHECK_LEAKS(); 17 for (i = 1; i < 10; ++i) { 18 free(p[i]); 19 } 20 return 0; 21} 22 23#define NTHREADS 5 24 25main() { 26 int i; 27 pthread_t t[NTHREADS]; 28 int code; 29 30 GC_INIT(); 31 for (i = 0; i < NTHREADS; ++i) { 32 if ((code = pthread_create(t + i, 0, test, 0)) != 0) { 33 printf("Thread creation failed %d\n", code); 34 } 35 } 36 for (i = 0; i < NTHREADS; ++i) { 37 if ((code = pthread_join(t[i], 0)) != 0) { 38 printf("Thread join failed %lu\n", code); 39 } 40 } 41 CHECK_LEAKS(); 42 CHECK_LEAKS(); 43 CHECK_LEAKS(); 44 return 0; 45}