Skip to content

Commit

Permalink
poll-loop: Fix a bug while finding a poll node.
Browse files Browse the repository at this point in the history
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]>
Acked-by: Alin Gabriel Serdean <[email protected]>
Acked-by: Ben Pfaff <[email protected]>
  • Loading branch information
shettyg committed Oct 8, 2015
1 parent caad138 commit 3ca600a
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions lib/poll-loop.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down

0 comments on commit 3ca600a

Please sign in to comment.