File: post-syscall.c

package info (click to toggle)
valgrind 1%3A3.12.0~svn20160714-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 120,428 kB
  • ctags: 70,855
  • sloc: ansic: 674,645; exp: 26,134; xml: 21,574; asm: 7,570; cpp: 7,567; makefile: 7,380; sh: 6,188; perl: 5,855; haskell: 195
file content (39 lines) | stat: -rw-r--r-- 852 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <time.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <signal.h>

#include "../memcheck.h"

/* Check that a syscall's POST function gets called if it completes
   due to being interrupted.  nanosleep is used here, because it
   writes a result even if it fails.  wait*() could also be used,
   because they successfully complete if interrupted by SIGCHLD.
 */
static void handler(int s)
{
}

int main()
{
	struct timespec req, rem;
	int ret;

	req.tv_sec = 2;
	req.tv_nsec = 0;

	signal(SIGALRM, handler);

	alarm(1);
	ret = nanosleep(&req, &rem);
	
	if (ret != -1 || errno != EINTR) {
		fprintf(stderr, "FAILED: expected nanosleep to be interrupted\n");
	} else {
		(void) VALGRIND_CHECK_VALUE_IS_DEFINED(rem);
		fprintf(stderr, "PASSED\n"); /* assuming CHECK_VALUE_IS_DEFINED doesn't print anything */
	}

	return 0;
}