The list of epoll events contains references to channels which may
be stale when one of those channels is deleted.  The safest thing
to do is simply refresh epoll() whenever a channel is deleted.

Bug #16057.
Signed-off-by: Ethan Jackson <et...@nicira.com>
---
 lib/dpif-linux.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c
index 7293063..b863a2e 100644
--- a/lib/dpif-linux.c
+++ b/lib/dpif-linux.c
@@ -358,6 +358,7 @@ del_channel(struct dpif_linux *dpif, uint32_t port_no)
     }
 
     epoll_ctl(dpif->epoll_fd, EPOLL_CTL_DEL, nl_sock_fd(ch->sock), NULL);
+    dpif->event_offset = dpif->n_events = 0;
 
     nl_sock_destroy(ch->sock);
     ch->sock = NULL;
-- 
1.7.9.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to