From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59078) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V7Jge-0008Qq-71 for qemu-devel@nongnu.org; Thu, 08 Aug 2013 02:27:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V7JgV-00014w-Mh for qemu-devel@nongnu.org; Thu, 08 Aug 2013 02:27:04 -0400 Received: from mail-ie0-x234.google.com ([2607:f8b0:4001:c03::234]:36959) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V7JgV-00014k-HY for qemu-devel@nongnu.org; Thu, 08 Aug 2013 02:26:55 -0400 Received: by mail-ie0-f180.google.com with SMTP id aq17so1212969iec.11 for ; Wed, 07 Aug 2013 23:26:55 -0700 (PDT) From: Liu Ping Fan Date: Thu, 8 Aug 2013 14:26:08 +0800 Message-Id: <1375943171-1063-3-git-send-email-pingfank@linux.vnet.ibm.com> In-Reply-To: <1375943171-1063-1-git-send-email-pingfank@linux.vnet.ibm.com> References: <1375943171-1063-1-git-send-email-pingfank@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH v1 2/5] slirp: make timeout local List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Paolo Bonzini , mdroth , Stefan Hajnoczi Each slirp has its own time to caculate timeout. Signed-off-by: Liu Ping Fan --- slirp/slirp.c | 22 ++++++++++------------ slirp/slirp.h | 3 +++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/slirp/slirp.c b/slirp/slirp.c index 80b28ea..55654d5 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -40,8 +40,6 @@ static const uint8_t special_ethaddr[ETH_ALEN] = { static const uint8_t zero_ethaddr[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 }; u_int curtime; -static u_int time_fasttimo, last_slowtimo; -static int do_slowtimo; static QTAILQ_HEAD(slirp_instances, Slirp) slirp_instances = QTAILQ_HEAD_INITIALIZER(slirp_instances); @@ -278,14 +276,13 @@ void slirp_pollfds_fill(GArray *pollfds) /* * First, TCP sockets */ - do_slowtimo = 0; QTAILQ_FOREACH(slirp, &slirp_instances, entry) { /* * *_slowtimo needs calling if there are IP fragments * in the fragment queue, or there are TCP connections active */ - do_slowtimo |= ((slirp->tcb.so_next != &slirp->tcb) || + slirp->do_slowtimo = ((slirp->tcb.so_next != &slirp->tcb) || (&slirp->ipq.ip_link != slirp->ipq.ip_link.next)); for (so = slirp->tcb.so_next; so != &slirp->tcb; @@ -299,8 +296,9 @@ void slirp_pollfds_fill(GArray *pollfds) /* * See if we need a tcp_fasttimo */ - if (time_fasttimo == 0 && so->so_tcpcb->t_flags & TF_DELACK) { - time_fasttimo = curtime; /* Flag when we want a fasttimo */ + if (slirp->time_fasttimo == 0 && + so->so_tcpcb->t_flags & TF_DELACK) { + slirp->time_fasttimo = curtime; /* Flag when want a fasttimo */ } /* @@ -381,7 +379,7 @@ void slirp_pollfds_fill(GArray *pollfds) udp_detach(so); continue; } else { - do_slowtimo = 1; /* Let socket expire */ + slirp->do_slowtimo = 1; /* Let socket expire */ } } @@ -422,7 +420,7 @@ void slirp_pollfds_fill(GArray *pollfds) icmp_detach(so); continue; } else { - do_slowtimo = 1; /* Let socket expire */ + slirp->do_slowtimo = 1; /* Let socket expire */ } } @@ -454,14 +452,14 @@ void slirp_pollfds_poll(GArray *pollfds, int select_error) /* * See if anything has timed out */ - if (time_fasttimo && ((curtime - time_fasttimo) >= 2)) { + if (slirp->time_fasttimo && ((curtime - slirp->time_fasttimo) >= 2)) { tcp_fasttimo(slirp); - time_fasttimo = 0; + slirp->time_fasttimo = 0; } - if (do_slowtimo && ((curtime - last_slowtimo) >= 499)) { + if (slirp->do_slowtimo && ((curtime - slirp->last_slowtimo) >= 499)) { ip_slowtimo(slirp); tcp_slowtimo(slirp); - last_slowtimo = curtime; + slirp->last_slowtimo = curtime; } /* diff --git a/slirp/slirp.h b/slirp/slirp.h index fe0e65d..008360e 100644 --- a/slirp/slirp.h +++ b/slirp/slirp.h @@ -203,6 +203,9 @@ bool arp_table_search(Slirp *slirp, uint32_t ip_addr, struct Slirp { QTAILQ_ENTRY(Slirp) entry; + u_int time_fasttimo; + u_int last_slowtimo; + int do_slowtimo; /* virtual network configuration */ struct in_addr vnetwork_addr; -- 1.8.1.4