mirror of
https://github.com/openvswitch/ovs
synced 2025-10-19 14:37:21 +00:00
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>
This commit is contained in:
@@ -50,12 +50,12 @@ extern "C" {
|
||||
* caller to supply a location explicitly, which is useful if the caller's own
|
||||
* caller would be more useful in log output. See timer_wait_at() for an
|
||||
* example. */
|
||||
void poll_fd_wait_at(int fd, HANDLE wevent, short int events, const char *where);
|
||||
#ifndef _WIN32
|
||||
#define poll_fd_wait(fd, events) poll_fd_wait_at(fd, 0, events, SOURCE_LOCATOR)
|
||||
#endif
|
||||
#define poll_fd_wait_event(fd, wevent, events) \
|
||||
poll_fd_wait_at(fd, wevent, events, SOURCE_LOCATOR)
|
||||
void poll_fd_wait_at(int fd, short int events, const char *where);
|
||||
#define poll_fd_wait(fd, events) poll_fd_wait_at(fd, events, SOURCE_LOCATOR)
|
||||
|
||||
#ifdef _WIN32
|
||||
#define poll_wevent_wait(wevent) poll_wevent_wait_at(wevent, SOURCE_LOCATOR)
|
||||
#endif /* _WIN32 */
|
||||
|
||||
void poll_timer_wait_at(long long int msec, const char *where);
|
||||
#define poll_timer_wait(msec) poll_timer_wait_at(msec, SOURCE_LOCATOR)
|
||||
|
Reference in New Issue
Block a user