staging: rtl8192u: remove redundant assignment to pointer crypt
[linux/fpc-iii.git] / tools / testing / vsock / timeout.c
blob44aee49b6cee07deb9443e3c2595ef680b726053
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Timeout API for single-threaded programs that use blocking
3 * syscalls (read/write/send/recv/connect/accept).
5 * Copyright (C) 2017 Red Hat, Inc.
7 * Author: Stefan Hajnoczi <stefanha@redhat.com>
8 */
10 /* Use the following pattern:
12 * timeout_begin(TIMEOUT);
13 * do {
14 * ret = accept(...);
15 * timeout_check("accept");
16 * } while (ret < 0 && ret == EINTR);
17 * timeout_end();
20 #include <stdlib.h>
21 #include <stdbool.h>
22 #include <unistd.h>
23 #include <stdio.h>
24 #include "timeout.h"
26 static volatile bool timeout;
28 /* SIGALRM handler function. Do not use sleep(2), alarm(2), or
29 * setitimer(2) while using this API - they may interfere with each
30 * other.
32 void sigalrm(int signo)
34 timeout = true;
37 /* Start a timeout. Call timeout_check() to verify that the timeout hasn't
38 * expired. timeout_end() must be called to stop the timeout. Timeouts cannot
39 * be nested.
41 void timeout_begin(unsigned int seconds)
43 alarm(seconds);
46 /* Exit with an error message if the timeout has expired */
47 void timeout_check(const char *operation)
49 if (timeout) {
50 fprintf(stderr, "%s timed out\n", operation);
51 exit(EXIT_FAILURE);
55 /* Stop a timeout */
56 void timeout_end(void)
58 alarm(0);
59 timeout = false;