]>
Commit | Line | Data |
---|---|---|
1d548381 JH |
1 | #ifndef GC_THREADS |
2 | # define GC_THREADS | |
3 | #endif | |
f54d4287 | 4 | #include "leak_detector.h" |
1d548381 JH |
5 | #ifdef GC_PTHREADS |
6 | # include <pthread.h> | |
7 | #else | |
8 | # include <windows.h> | |
9 | #endif | |
f54d4287 BM |
10 | #include <stdio.h> |
11 | ||
1d548381 JH |
12 | #ifdef GC_PTHREADS |
13 | void * test(void * arg) | |
14 | #else | |
15 | DWORD WINAPI test(LPVOID arg) | |
16 | #endif | |
17 | { | |
f54d4287 BM |
18 | int *p[10]; |
19 | int i; | |
f54d4287 BM |
20 | for (i = 0; i < 10; ++i) { |
21 | p[i] = malloc(sizeof(int)+i); | |
22 | } | |
23 | CHECK_LEAKS(); | |
24 | for (i = 1; i < 10; ++i) { | |
25 | free(p[i]); | |
26 | } | |
1d548381 JH |
27 | #ifdef GC_PTHREADS |
28 | return arg; | |
29 | #else | |
30 | return (DWORD)(GC_word)arg; | |
31 | #endif | |
32 | } | |
f54d4287 BM |
33 | |
34 | #define NTHREADS 5 | |
35 | ||
1d548381 | 36 | int main(void) { |
f54d4287 | 37 | int i; |
1d548381 | 38 | #ifdef GC_PTHREADS |
f54d4287 | 39 | pthread_t t[NTHREADS]; |
1d548381 JH |
40 | #else |
41 | HANDLE t[NTHREADS]; | |
42 | DWORD thread_id; | |
43 | #endif | |
f54d4287 BM |
44 | int code; |
45 | ||
1d548381 JH |
46 | GC_find_leak = 1; /* for new collect versions not compiled */ |
47 | GC_INIT(); | |
f54d4287 | 48 | for (i = 0; i < NTHREADS; ++i) { |
1d548381 JH |
49 | #ifdef GC_PTHREADS |
50 | code = pthread_create(t + i, 0, test, 0); | |
51 | #else | |
52 | t[i] = CreateThread(NULL, 0, test, 0, 0, &thread_id); | |
53 | code = t[i] != NULL ? 0 : (int)GetLastError(); | |
54 | #endif | |
55 | if (code != 0) { | |
56 | printf("Thread creation failed %d\n", code); | |
f54d4287 BM |
57 | } |
58 | } | |
59 | for (i = 0; i < NTHREADS; ++i) { | |
1d548381 JH |
60 | #ifdef GC_PTHREADS |
61 | code = pthread_join(t[i], 0); | |
62 | #else | |
63 | code = WaitForSingleObject(t[i], INFINITE) == WAIT_OBJECT_0 ? 0 : | |
64 | (int)GetLastError(); | |
65 | #endif | |
66 | if (code != 0) { | |
67 | printf("Thread join failed %d\n", code); | |
f54d4287 BM |
68 | } |
69 | } | |
70 | CHECK_LEAKS(); | |
71 | CHECK_LEAKS(); | |
72 | CHECK_LEAKS(); | |
e66afe47 | 73 | return 0; |
f54d4287 | 74 | } |