Handle possible clock_gettime() errors in curms().
Use curms() instead of new clock_gettime() call points, too.
This commit is contained in:
parent
a39f1dabfe
commit
2a26acacdd
13
src/arp.c
13
src/arp.c
@ -491,22 +491,13 @@ int arp_gw_query_timeout(struct client_state_t cs[static 1], long long nowts)
|
|||||||
__attribute__((noreturn))
|
__attribute__((noreturn))
|
||||||
static void quit_after_lease_handler(struct client_state_t cs[static 1])
|
static void quit_after_lease_handler(struct client_state_t cs[static 1])
|
||||||
{
|
{
|
||||||
struct timespec res;
|
long long init_ts = curms();
|
||||||
if (clock_gettime(CLOCK_MONOTONIC, &res) < 0) {
|
|
||||||
suicide("%s: (%s) clock_gettime failed: %s",
|
|
||||||
client_config.interface, __func__, strerror(errno));
|
|
||||||
}
|
|
||||||
time_t init_ts = res.tv_sec;
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (arp_announcement(cs) >= 0)
|
if (arp_announcement(cs) >= 0)
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
log_warning("%s: (%s) Failed to send ARP announcement: %s",
|
log_warning("%s: (%s) Failed to send ARP announcement: %s",
|
||||||
client_config.interface, __func__, strerror(errno));
|
client_config.interface, __func__, strerror(errno));
|
||||||
if (clock_gettime(CLOCK_MONOTONIC, &res) < 0) {
|
if (curms() - init_ts > (60LL * 1000LL)) break;
|
||||||
suicide("%s: (%s) clock_gettime failed: %s",
|
|
||||||
client_config.interface, __func__, strerror(errno));
|
|
||||||
}
|
|
||||||
if (res.tv_sec - init_ts > 60) break;
|
|
||||||
}
|
}
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
10
src/sys.c
10
src/sys.c
@ -38,6 +38,16 @@
|
|||||||
#include "ndhc.h"
|
#include "ndhc.h"
|
||||||
#include "sys.h"
|
#include "sys.h"
|
||||||
|
|
||||||
|
long long IMPL_curms(const char *parent_function)
|
||||||
|
{
|
||||||
|
struct timespec ts;
|
||||||
|
if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0) {
|
||||||
|
suicide("%s: (%s) clock_gettime failed: %s",
|
||||||
|
client_config.interface, parent_function, strerror(errno));
|
||||||
|
}
|
||||||
|
return ts.tv_sec * 1000LL + ts.tv_nsec / 1000000LL;
|
||||||
|
}
|
||||||
|
|
||||||
void epoll_add(int epfd, int fd)
|
void epoll_add(int epfd, int fd)
|
||||||
{
|
{
|
||||||
struct epoll_event ev;
|
struct epoll_event ev;
|
||||||
|
@ -31,18 +31,13 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "ndhc-defines.h"
|
#include "ndhc-defines.h"
|
||||||
|
|
||||||
static inline long long curms()
|
|
||||||
{
|
|
||||||
struct timespec ts;
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
|
||||||
return ts.tv_sec * 1000LL + ts.tv_nsec / 1000000LL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline size_t min_size_t(size_t a, size_t b)
|
static inline size_t min_size_t(size_t a, size_t b)
|
||||||
{
|
{
|
||||||
return a < b ? a : b;
|
return a < b ? a : b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define curms() IMPL_curms(__func__)
|
||||||
|
long long IMPL_curms(const char *parent_function);
|
||||||
void epoll_add(int epfd, int fd);
|
void epoll_add(int epfd, int fd);
|
||||||
void epoll_del(int epfd, int fd);
|
void epoll_del(int epfd, int fd);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user