wayland: Use read_all() when reading wayland selections
Plain input stream read() calls don't provide hard guarantees about the number of bytes read, but the async method callback sort of relies on bytes being less than requested only when reaching the end of the transmitted data. If that happens mid transfer, that doesn't bode well. This is actually the behavior of g_input_stream_read_all(), so switch to using it.
This commit is contained in:
parent
61bc1a7d6f
commit
006cdac531
@ -689,9 +689,8 @@ wayland_data_read_cb (GObject *object,
|
|||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
gsize bytes_read;
|
gsize bytes_read;
|
||||||
|
|
||||||
bytes_read = g_input_stream_read_finish (G_INPUT_STREAM (object),
|
if (!g_input_stream_read_all_finish (G_INPUT_STREAM (object),
|
||||||
res, &error);
|
res, &bytes_read, &error))
|
||||||
if (error)
|
|
||||||
{
|
{
|
||||||
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||||
{
|
{
|
||||||
@ -762,7 +761,7 @@ wayland_selection_data_read (MetaSelectionBridge *selection)
|
|||||||
{
|
{
|
||||||
WaylandSelectionData *data = selection->wayland_selection;
|
WaylandSelectionData *data = selection->wayland_selection;
|
||||||
|
|
||||||
g_input_stream_read_async (data->stream, data->buffer,
|
g_input_stream_read_all_async (data->stream, data->buffer,
|
||||||
INCR_CHUNK_SIZE, G_PRIORITY_DEFAULT,
|
INCR_CHUNK_SIZE, G_PRIORITY_DEFAULT,
|
||||||
data->cancellable,
|
data->cancellable,
|
||||||
wayland_data_read_cb, selection);
|
wayland_data_read_cb, selection);
|
||||||
|
Loading…
Reference in New Issue
Block a user