From: Stefan Berger <stefanb(a)linux.vnet.ibm.com>
Cap the poll timeout in the DHCP Snooping code to a max. of 10 seconds
to not hold up the libvirt shutdown longer than this.
Signed-off-by: Stefan Berger <stefanb(a)linux.vnet.ibm.com>
---
src/nwfilter/nwfilter_dhcpsnoop.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcpsnoop.c
index a96a790..de9c33b 100644
--- a/src/nwfilter/nwfilter_dhcpsnoop.c
+++ b/src/nwfilter/nwfilter_dhcpsnoop.c
@@ -265,6 +265,7 @@ struct _virNWFilterSnoopRateLimitConf {
const unsigned int burstRate;
const unsigned int burstInterval;
};
+#define SNOOP_POLL_MAX_TIMEOUT_MS (10 * 1000) /* milliseconds */
typedef struct _virNWFilterSnoopPcapConf virNWFilterSnoopPcapConf;
typedef virNWFilterSnoopPcapConf *virNWFilterSnoopPcapConfPtr;
@@ -1419,6 +1420,10 @@ virNWFilterDHCPSnoopThread(void *req0)
break;
}
+ /* cap pollTo so we don't hold up the join for too long */
+ if (pollTo < 0 || pollTo > SNOOP_POLL_MAX_TIMEOUT_MS)
+ pollTo = SNOOP_POLL_MAX_TIMEOUT_MS;
+
n = poll(fds, ARRAY_CARDINALITY(fds), pollTo);
if (n < 0) {
--
1.8.1.4