blob: 056e4172e6925fff9cd5bc1f66feea5ef05b9b80 [file] [log] [blame]
bartf64ff032011-03-12 14:02:06 +00001/* Stress test for the --free-is-write command-line option. */
2
3#include <pthread.h>
4#include <assert.h>
5#include <unistd.h>
6#include <stdlib.h>
7#include <stdio.h>
8#include <pthread.h>
9#include <string.h>
10
11#define MALLOC_SIZE 22816
12#define THREAD_COUNT 10
13#define MALLOC_COUNT 1000
14
15static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
16// 'mutex' protects 'count'.
17static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
18static unsigned count;
19
20void* thread_func(void* arg)
21{
22 unsigned i;
23
24 for (i = 0; i < MALLOC_COUNT; ++i) {
25 void* ptr;
26
27 ptr = malloc(MALLOC_SIZE);
28 memset(ptr, 0, MALLOC_SIZE);
29 free(ptr);
30 }
31
32 pthread_mutex_lock(&mutex);
33 ++count;
34 pthread_cond_signal(&cond);
35 pthread_mutex_unlock(&mutex);
36
37 return 0;
38}
39
40int main(int argc, char **argv)
41{
42 pthread_t thread[THREAD_COUNT];
43 int result;
44 int i;
45
46 for (i = 0; i < THREAD_COUNT; i++) {
47 result = pthread_create(&thread[i], 0, thread_func, 0);
48 assert(result == 0);
49 }
50
51 pthread_mutex_lock(&mutex);
52 while (count < THREAD_COUNT && pthread_cond_wait(&cond, &mutex) == 0)
53 ;
54 pthread_mutex_unlock(&mutex);
55
56 for (i = 0; i < THREAD_COUNT; i++)
57 pthread_join(thread[i], 0);
58
59 fflush(stdout);
60
61 fprintf(stderr, "Done.\n");
62
63 return 0;
64}