1 #include <time.h>
2 #include <unistd.h>
3 #include <stdio.h>
4 #include <errno.h>
5 #include <signal.h>
6 
7 #include "../memcheck.h"
8 
9 /* Check that a syscall's POST function gets called if it completes
10    due to being interrupted.  nanosleep is used here, because it
11    writes a result even if it fails.  wait*() could also be used,
12    because they successfully complete if interrupted by SIGCHLD.
13  */
14 static void handler(int s)
15 {
16 }
17 
18 int main()
19 {
20 	struct timespec req, rem;
21 	int ret;
22 
23 	req.tv_sec = 2;
24 	req.tv_nsec = 0;
25 
26 	signal(SIGALRM, handler);
27 
28 	alarm(1);
29 	ret = nanosleep(&req, &rem);
30 
31 	if (ret != -1 || errno != EINTR) {
32 		fprintf(stderr, "FAILED: expected nanosleep to be interrupted\n");
33 	} else {
34 		(void) VALGRIND_CHECK_VALUE_IS_DEFINED(rem);
35 		fprintf(stderr, "PASSED\n"); /* assuming CHECK_VALUE_IS_DEFINED doesn't print anything */
36 	}
37 
38 	return 0;
39 }
40