- * when an event causes a wakeup. Ordinarily, it is automatically filled in
- * with the location in the source of the call, and the caller should therefore
- * omit it. But, if the function you are implementing is very generic, so that
- * its location in the source would not be very helpful for debugging, you can
- * avoid the macro expansion and pass a different argument, e.g.:
- * (poll_fd_wait)(fd, events, where);
- * See timer_wait() for an example.
- */
-struct poll_waiter *poll_fd_wait(int fd, short int events, const char *where);
-#define poll_fd_wait(fd, events) poll_fd_wait(fd, events, SOURCE_LOCATOR)
+ * when an event causes a wakeup. Each of these ways to schedule an event has
+ * a function and a macro wrapper. The macro version automatically supplies
+ * the source code location of the caller. The function version allows the
+ * 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)