blob: cc473503e40f7a06ef71131f979afcaf9c76d0f2 [file] [log] [blame]
#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 successully 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;
}