streams: add private 'async close via threads' API

Add an internal helper to find out if close_async() is implemented via
threads using the default implementation in the base class.

We will use this to decide if we should do a 'pure async' close of a
GIOStream or not.

https://bugzilla.gnome.org/show_bug.cgi?id=741630
This commit is contained in:
Ryan Lortie 2015-01-20 08:09:33 -05:00
parent f56f1ef074
commit cb40c553ae
3 changed files with 41 additions and 0 deletions

View File

@ -1253,6 +1253,26 @@ g_input_stream_async_read_is_via_threads (GInputStream *stream)
g_pollable_input_stream_can_poll (G_POLLABLE_INPUT_STREAM (stream))));
}
/*< internal >
* g_input_stream_async_close_is_via_threads:
* @stream: input stream
*
* Checks if an input stream's close_async function uses threads.
*
* Returns: %TRUE if @stream's close_async function uses threads.
**/
gboolean
g_input_stream_async_close_is_via_threads (GInputStream *stream)
{
GInputStreamClass *class;
g_return_val_if_fail (G_IS_INPUT_STREAM (stream), FALSE);
class = G_INPUT_STREAM_GET_CLASS (stream);
return class->close_async == g_input_stream_real_close_async;
}
/********************************************
* Default implementation of async ops *
********************************************/

View File

@ -27,7 +27,9 @@
G_BEGIN_DECLS
gboolean g_input_stream_async_read_is_via_threads (GInputStream *stream);
gboolean g_input_stream_async_close_is_via_threads (GInputStream *stream);
gboolean g_output_stream_async_write_is_via_threads (GOutputStream *stream);
gboolean g_output_stream_async_close_is_via_threads (GOutputStream *stream);
void g_socket_connection_set_cached_remote_address (GSocketConnection *connection,
GSocketAddress *address);

View File

@ -1705,6 +1705,25 @@ g_output_stream_async_write_is_via_threads (GOutputStream *stream)
g_pollable_output_stream_can_poll (G_POLLABLE_OUTPUT_STREAM (stream))));
}
/*< internal >
* g_output_stream_async_close_is_via_threads:
* @stream: output stream
*
* Checks if an output stream's close_async function uses threads.
*
* Returns: %TRUE if @stream's close_async function uses threads.
**/
gboolean
g_output_stream_async_close_is_via_threads (GOutputStream *stream)
{
GOutputStreamClass *class;
g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
class = G_OUTPUT_STREAM_GET_CLASS (stream);
return class->close_async == g_output_stream_real_close_async;
}
/********************************************
* Default implementation of async ops *