vgdb: Handle EAGAIN in read_buf
[valgrind.git] / none / tests / pth_cancel1.c
blobf48e075ecdc6678b7eded260e2c292c9bc25ef2e
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <pthread.h>
4 #include <unistd.h>
6 static void thread_cleanup(void *arg)
8 printf("cleaning up 0x%lx\n", (long)arg);
10 return;
13 static void *thread_main(void *arg)
15 pthread_cleanup_push(thread_cleanup, (void *)0x1234);
16 pthread_cleanup_push(thread_cleanup, (void *)0x5678);
18 if (pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) != 0)
20 perror("pthread_setcanceltype");
21 return NULL;
24 if (pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) != 0)
26 perror("pthread_setcancelstate");
27 return NULL;
30 pause();
32 pthread_cleanup_pop(0);
33 pthread_cleanup_pop(0);
35 return NULL;
38 int main(int argc, char **argv)
40 pthread_t tid;
41 void *result;
43 if (pthread_create(&tid, NULL, thread_main, NULL) != 0)
45 perror("pthread_create");
46 exit(1);
49 sleep(1);
51 if (pthread_cancel(tid) != 0)
53 perror("pthread_cancel");
54 exit(1);
57 if (pthread_join(tid, &result) != 0)
59 perror("pthread_join");
60 exit(1);
63 printf("result is %s\n", result == PTHREAD_CANCELED ? "correct" : "incorrect");
65 exit(0);