On Wed, Sep 30, 2015 at 2:29 PM, Alin Serdean
<[email protected]> wrote:
> 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);

I did not follow what you meant above at all. Can you elaborate?

>
> And probably also for poll_create_node as well.
>
> Like Ilya and Nikita were mentioning.
>
> Otherwise:
> Acked-by: Alin Gabriel Serdean <[email protected]>
>
>
>> -----Mesaj original-----
>> De la: Gurucharan Shetty [mailto:[email protected]]
>> Trimis: Thursday, October 1, 2015 12:19 AM
>> Către: [email protected]
>> Cc: Alin Serdean <[email protected]>; Gurucharan Shetty
>> <[email protected]>
>> 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 <[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

Reply via email to