From 1f765cc21bad15aa3cd59b8b30460bc7c9ded7f0 Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Mon, 11 Feb 2008 21:43:34 +0000 Subject: [PATCH] When polling and interupted, continue as the signal will then be in our pipe. --- client.c | 12 ++++++++++-- signal.c | 1 - 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/client.c b/client.c index e4d1019e..3061a527 100644 --- a/client.c +++ b/client.c @@ -500,6 +500,10 @@ static int wait_for_packet (struct pollfd *fds, state_t *state, timeout = TIMEOUT_MINI_INF; retval = poll (fds, 2, timeout * 1000); + if (retval == -1 && errno == EINTR) { + retval = 0; + continue; + } if (retval == 0) _send_message (state, state->last_type, options); @@ -530,8 +534,12 @@ static int wait_for_packet (struct pollfd *fds, state_t *state, } timeout *= 1000; state->start = uptime (); - retval = poll (fds, iface->fd == -1 ? 1 : 2, timeout); + retval = poll (fds, 2, timeout); state->timeout -= uptime () - state->start; + if (retval == -1 && errno == EINTR) { + retval = 0; + continue; + } if (retval == 0 && iface->fd != -1 && state->timeout > 0) _send_message (state, state->last_type, options); } @@ -1039,7 +1047,7 @@ int dhcp_run (const options_t *options, int *pidfd) interface_t *iface; state_t *state = NULL; struct pollfd fds[] = { - { -1, POLLIN, 0 }, + { -1, POLLIN | POLLERR | POLLPRI | POLLOUT | POLLERR | POLLHUP | POLLNVAL, 0 }, { -1, POLLIN, 0 } }; int retval = -1; diff --git a/signal.c b/signal.c index 37b59e8f..d37db632 100644 --- a/signal.c +++ b/signal.c @@ -88,7 +88,6 @@ int signal_read (struct pollfd *fd) int sig = -1; /* Pop a signal off the our stack */ - if (signals[0]) { unsigned int i = 0; sig = signals[0];