From 2e1e06411095ed122d44bf0e3f5e18e8a6304b16 Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Wed, 29 Apr 2009 09:36:43 +0100 Subject: net: vlan clients with no fd_can_read() can always receive If a vlan client has no fd_can_read(), that means it can always receive packets. The current code assumes it can *never* receive packets. Signed-off-by: Mark McLoughlin --- net.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/net.c b/net.c index 443f769a03..0d9e520301 100644 --- a/net.c +++ b/net.c @@ -389,15 +389,19 @@ VLANClientState *qemu_find_vlan_client(VLANState *vlan, void *opaque) return NULL; } -int qemu_can_send_packet(VLANClientState *vc1) +int qemu_can_send_packet(VLANClientState *sender) { - VLANState *vlan = vc1->vlan; + VLANState *vlan = sender->vlan; VLANClientState *vc; - for(vc = vlan->first_client; vc != NULL; vc = vc->next) { - if (vc != vc1) { - if (vc->fd_can_read && vc->fd_can_read(vc->opaque)) - return 1; + for (vc = vlan->first_client; vc != NULL; vc = vc->next) { + if (vc == sender) { + continue; + } + + /* no fd_can_read() handler, they can always receive */ + if (!vc->fd_can_read || vc->fd_can_read(vc->opaque)) { + return 1; } } return 0; -- cgit v1.2.3