]> git.proxmox.com Git - mirror_ovs.git/commit
poll-loop: Create Windows event handles for sockets automatically.
authorGurucharan Shetty <gshetty@nicira.com>
Fri, 27 Jun 2014 20:30:49 +0000 (13:30 -0700)
committerGurucharan Shetty <gshetty@nicira.com>
Mon, 30 Jun 2014 15:47:33 +0000 (08:47 -0700)
commit1ca3348ed42ad7fed55c2418fecf8c8eac18de66
tree3418d2d0cf10b09b6f8844e79b58ff055f111c3a
parent1547f8e33c2e67408dfec0ee48c2a81f8cec498e
poll-loop: Create Windows event handles for sockets automatically.

We currently have a poll_fd_wait_event(fd, wevent, events) function that
is used at places common to Windows and Linux where we have to wait on
sockets.  On Linux, 'wevent' is always set as zero. On Windows, for sockets,
when we send both 'fd' and 'wevent', we associate them with each other for
'events' and then wait on 'wevent'. Also on Windows, when we only send 'wevent'
to this function, we would simply wait for all events for that 'wevent'.

There is a disadvantage with this approach.
* Windows clients need to create a 'wevent' and then pass it along. This
means that at a lot of places where we create sockets, we also are forced
to create a 'wevent'.

With this commit, we pass the responsibility of creating a 'wevent' to
poll_fd_wait() in case of sockets. That way, a client using poll_fd_wait()
is only concerned about sockets and not about 'wevents'. There is a potential
disadvantage with this change in that we create events more often and that
may have a performance penalty. If that turns out to be the case, we will
eventually need to create a pool of wevents that can be re-used.

In Windows, there are cases where we want to wait on a event (not
associated with any sockets) and then control it using functions
like SetEvent() etc. For that purpose, introduce a new function
poll_wevent_wait(). For this function, the client needs to create a event
and then pass it along as an argument.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-By: Ben Pfaff <blp@nicira.com>
lib/daemon-windows.c
lib/fatal-signal.c
lib/latch-unix.c
lib/latch-windows.c
lib/poll-loop.c
lib/poll-loop.h
lib/stream-fd-windows.c
lib/stream-ssl.c