VMM: Make new virtio implementation work with new vmm 2LS
[akaros.git] / tests / old / dtls_test.c
1 #include <stdio.h>
2 #include <pthread.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5
6 /* OS dependent #incs */
7 #include <parlib/parlib.h>
8
9 #define NR_TEST_THREADS 10
10 #define NUM_PTHREAD_KEYS 10
11 pthread_t my_threads[NR_TEST_THREADS];
12 void *my_retvals[NR_TEST_THREADS];
13 pthread_key_t pthread_keys[NUM_PTHREAD_KEYS];
14 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
15
16 void *thread(void* arg)
17 {       
18   long *dtls_value[NUM_PTHREAD_KEYS];
19   for(int i=0; i<NUM_PTHREAD_KEYS; i++) {
20     dtls_value[i] = malloc(sizeof(long));
21     *dtls_value[i] = (long)pthread_self() + i;
22     pthread_setspecific(pthread_keys[i], dtls_value[i]);
23   }
24
25   pthread_mutex_lock(&mutex);
26   long self = (long)pthread_self();
27   printf("In pthread %p (%ld)\n", (void*)self, self);
28   for(int i=0; i<NUM_PTHREAD_KEYS; i++) {
29     long *value = pthread_getspecific(pthread_keys[i]);
30     printf("  dtls_value[%d] = %ld\n", i, *value);
31   }
32   pthread_mutex_unlock(&mutex);
33
34   return (void*)(self);
35 }
36
37 static void dtls_dtor(void *dtls)
38 {
39   pthread_mutex_lock(&mutex);
40   printf("Phread %p freeing dtls %p.\n", pthread_self(), dtls);
41   free(dtls);
42   pthread_mutex_unlock(&mutex);
43 }
44
45 int main(int argc, char** argv) 
46 {
47   printf("Starting dtls test.\n");
48   for(int i=0; i<NUM_PTHREAD_KEYS; i++) {
49     pthread_key_create(&pthread_keys[i], dtls_dtor);
50   }
51   for (int i = 0; i < NR_TEST_THREADS; i++) {
52         if (pthread_create(&my_threads[i], NULL, &thread, NULL))
53                 perror("pth_create failed");
54   }
55   for (int i = 0; i < NR_TEST_THREADS; i++) {
56         pthread_join(my_threads[i], &my_retvals[i]);
57   }
58   for(int i=0; i<NUM_PTHREAD_KEYS; i++) {
59     pthread_key_delete(pthread_keys[i]);
60   }
61   printf("Test complete!\n");
62