From 953e7f54e679cd40fff28e29189ed9e24bfb0758 Mon Sep 17 00:00:00 2001 From: Jan Kiszka Date: Mon, 5 Mar 2012 19:50:39 +0100 Subject: slirp: Prevent recursion of if_start if_start can be called recursively via if_encap. Avoid this as our scheme of dequeuing packets is not compatible with this. CC: Fabien Chouteau CC: Zhi Yong Wu CC: Stefan Weil Signed-off-by: Jan Kiszka --- slirp/if.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'slirp/if.c') diff --git a/slirp/if.c b/slirp/if.c index 14fdef1e57..f7aebe9557 100644 --- a/slirp/if.c +++ b/slirp/if.c @@ -163,10 +163,17 @@ void if_start(Slirp *slirp) DEBUG_CALL("if_start"); + if (slirp->if_start_busy) { + return; + } + slirp->if_start_busy = true; + while (slirp->if_queued) { /* check if we can really output */ - if (!slirp_can_output(slirp->opaque)) + if (!slirp_can_output(slirp->opaque)) { + slirp->if_start_busy = false; return; + } /* * See which queue to get next packet from @@ -221,4 +228,6 @@ void if_start(Slirp *slirp) } slirp->if_queued = requeued; + + slirp->if_start_busy = false; } -- cgit v1.2.3