I think it would be nice to have 
ovs_assert(!fd != !wevent);
ifdefed under Windows.
And on the rest of the platforms:
ovs_assert(!fd != !wevent);

And probably also for poll_create_node as well.

Like Ilya and Nikita were mentioning.

Otherwise:
Acked-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com>


> -----Mesaj original-----
> De la: Gurucharan Shetty [mailto:shet...@nicira.com]
> Trimis: Thursday, October 1, 2015 12:19 AM
> Către: dev@openvswitch.org
> Cc: Alin Serdean <aserd...@cloudbasesolutions.com>; Gurucharan Shetty
> <gshe...@nicira.com>
> Subiect: [PATCH] poll-loop: Fix a bug while finding a poll node.
> 
> 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 <aserd...@cloudbasesolutions.com>
> Signed-off-by: Gurucharan Shetty <gshe...@nicira.com>
> ---
>  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
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to