dpif-linux: Reset epoll() on channel deletion.
authorEthan Jackson <ethan@nicira.com>
Wed, 10 Apr 2013 20:05:04 +0000 (13:05 -0700)
committerEthan Jackson <ethan@nicira.com>
Wed, 10 Apr 2013 20:59:51 +0000 (13:59 -0700)
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 <ethan@nicira.com>
lib/dpif-linux.c

index 05446ee..63cbaa7 100644 (file)
@@ -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;