When a poll_node is created, it gets either a 'fd' or a 'wevent' (can't get both). When the poll_node is searched for previous creations on that 'fd' or 'wevent', the search criteria was wrong for Windows. In Windows, when a 'fd' is received in poll_create_node, we create a corresponding 'wevent'. So while searching for that 'fd', we should not look for 'wevent' in the hmap_node.
Reported-by: Alin Gabriel Serdean <[email protected]> Signed-off-by: Gurucharan Shetty <[email protected]> --- lib/poll-loop.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/poll-loop.c b/lib/poll-loop.c index 3c4b55c..60e1f6e 100644 --- a/lib/poll-loop.c +++ b/lib/poll-loop.c @@ -57,16 +57,20 @@ struct poll_loop { static struct poll_loop *poll_loop(void); -/* Look up the node with same fd and wevent. */ +/* Look up the node with same fd or wevent. */ static struct poll_node * find_poll_node(struct poll_loop *loop, int fd, HANDLE wevent) { struct poll_node *node; + /* Both 'fd' and 'wevent' cannot be set. */ + ovs_assert(!fd != !wevent); + HMAP_FOR_EACH_WITH_HASH (node, hmap_node, hash_2words(fd, (uint32_t)wevent), &loop->poll_nodes) { - if (node->pollfd.fd == fd && node->wevent == wevent) { + if ((fd && node->pollfd.fd == fd) + || (wevent && node->wevent == wevent)) { return node; } } -- 1.7.9.5 _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
