| #define GC_LINUX_THREADS |
| #include "leak_detector.h" |
| #include <pthread.h> |
| #include <stdio.h> |
| |
| void * test(void * arg) { |
| int *p[10]; |
| int i; |
| GC_find_leak = 1; /* for new collect versions not compiled */ |
| /* with -DFIND_LEAK. */ |
| for (i = 0; i < 10; ++i) { |
| p[i] = malloc(sizeof(int)+i); |
| } |
| CHECK_LEAKS(); |
| for (i = 1; i < 10; ++i) { |
| free(p[i]); |
| } |
| } |
| |
| #define NTHREADS 5 |
| |
| main() { |
| int i; |
| pthread_t t[NTHREADS]; |
| int code; |
| |
| for (i = 0; i < NTHREADS; ++i) { |
| if ((code = pthread_create(t + i, 0, test, 0)) != 0) { |
| printf("Thread creation failed %d\n", code); |
| } |
| } |
| for (i = 0; i < NTHREADS; ++i) { |
| if ((code = pthread_join(t[i], 0)) != 0) { |
| printf("Thread join failed %lu\n", code); |
| } |
| } |
| CHECK_LEAKS(); |
| CHECK_LEAKS(); |
| CHECK_LEAKS(); |
| } |