1 /* Timeout API for single-threaded programs that use blocking
2 * syscalls (read/write/send/recv/connect/accept).
4 * Copyright (C) 2017 Red Hat, Inc.
6 * Author: Stefan Hajnoczi <stefanha@redhat.com>
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; version 2
14 /* Use the following pattern:
16 * timeout_begin(TIMEOUT);
19 * timeout_check("accept");
20 * } while (ret < 0 && ret == EINTR);
30 static volatile bool timeout
;
32 /* SIGALRM handler function. Do not use sleep(2), alarm(2), or
33 * setitimer(2) while using this API - they may interfere with each
36 void sigalrm(int signo
)
41 /* Start a timeout. Call timeout_check() to verify that the timeout hasn't
42 * expired. timeout_end() must be called to stop the timeout. Timeouts cannot
45 void timeout_begin(unsigned int seconds
)
50 /* Exit with an error message if the timeout has expired */
51 void timeout_check(const char *operation
)
54 fprintf(stderr
, "%s timed out\n", operation
);
60 void timeout_end(void)