Commit b65dac80 authored by John Ralls's avatar John Ralls

Fix poll able streams for Darwin (and probably BSD)


Darwin's poll doesn't change revents if there are no available events, though it returns 0. Initialize the fd.revents to 0 so that the test passes.

That reveals a test failure, though, because with socket streams it takes time for an event to pass through the socket. Provide an 80-usec delay to allow time for the propagation.
parent 5588d479
......@@ -3388,6 +3388,7 @@ g_socket_condition_check (GSocket *socket,
gint result;
poll_fd.fd = socket->priv->fd;
poll_fd.events = condition;
poll_fd.revents = 0;
do
result = g_poll (&poll_fd, 1, 0);
......
......@@ -577,6 +577,7 @@ g_unix_input_stream_pollable_is_readable (GPollableInputStream *stream)
poll_fd.fd = unix_stream->priv->fd;
poll_fd.events = G_IO_IN;
poll_fd.revents = 0;
do
result = g_poll (&poll_fd, 1, 0);
......
......@@ -532,6 +532,7 @@ g_unix_output_stream_pollable_is_writable (GPollableOutputStream *stream)
poll_fd.fd = unix_stream->priv->fd;
poll_fd.events = G_IO_OUT;
poll_fd.revents = 0;
do
result = g_poll (&poll_fd, 1, 0);
......
......@@ -1016,6 +1016,12 @@ test_converter_pollable (void)
socket_out = NULL;
}
/* Wait a few ticks to check for the pipe to propagate the
* write. Finesses the race condition in the following test,
* where is_readable fails because the write hasn't propagated,
* but the read then succeeds because it has. */
g_usleep (80L);
is_readable = g_pollable_input_stream_is_readable (pollable_in);
res = g_pollable_input_stream_read_nonblocking (pollable_in,
inptr, 1,
......
......@@ -70,6 +70,9 @@ write_callback (gpointer user_data)
nwrote = g_output_stream_write (out, buf, 2, NULL, &error);
g_assert_no_error (error);
g_assert_cmpint (nwrote, ==, 2);
/* Give the pipe a few ticks to propagate the write for sockets. On my
* iMac i7, 40 works, 30 doesn't. */
g_usleep (80L);
check_source_readability_callback (GINT_TO_POINTER (TRUE));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment