-/* The caller must ensure that 'msec' is not negative. */
-static void
-poll_timer_wait__(int msec, const char *where)
-{
- if (timeout < 0 || msec < timeout) {
- timeout = msec;
- timeout_where = where;
+#ifdef _WIN32
+ /* Null event cannot be polled. */
+ if (wevent == 0) {
+ VLOG_ERR("No event to wait fd %d", fd);
+ return;
+ }
+#endif
+
+ /* Check for duplicate. If found, "or" the event. */
+ node = find_poll_node(loop, fd, wevent);
+ if (node) {
+ node->pollfd.events |= events;
+ } else {
+ node = xzalloc(sizeof *node);
+ hmap_insert(&loop->poll_nodes, &node->hmap_node,
+ hash_2words(fd, wevent));
+ node->pollfd.fd = fd;
+ node->pollfd.events = events;
+ node->wevent = wevent;
+ node->where = where;