diff --git a/gst/gstpoll.c b/gst/gstpoll.c
index 04165a5..d1982ef 100644
--- a/gst/gstpoll.c
+++ b/gst/gstpoll.c
@@ -171,7 +171,7 @@ static gboolean gst_poll_add_fd_unlocked (GstPoll * set, GstPollFD * fd);
 #define RELEASE_EVENT(s)    (read ((s)->control_read_fd.fd, (s)->buf, 1) == 1)
 #else
 #define WAKE_EVENT(s)       (SetLastError (0), SetEvent ((s)->wakeup_event), errno = GetLastError () == NO_ERROR ? 0 : EACCES, errno == 0 ? 1 : 0)
-#define RELEASE_EVENT(s)    (ResetEvent ((s)->wakeup_event))
+#define RELEASE_EVENT(s)    (WaitForSingleObject ((s)->wakeup_event, INFINITE), ResetEvent ((s)->wakeup_event))
 #endif
 
 /* the poll/select call is also performed on a control socket, that way
@@ -568,9 +568,6 @@ gst_poll_new (gboolean controllable)
     if (socketpair (PF_UNIX, SOCK_STREAM, 0, control_sock) < 0)
       goto no_socket_pair;
 
-    fcntl (control_sock[0], F_SETFL, O_NONBLOCK);
-    fcntl (control_sock[1], F_SETFL, O_NONBLOCK);
-
     nset->control_read_fd.fd = control_sock[0];
     nset->control_write_fd.fd = control_sock[1];
 
