mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-11 15:06:14 +01:00
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.
This commit is contained in:
parent
5588d47985
commit
b65dac802e
@ -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));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user