mirror of
https://github.com/brl/mutter.git
synced 2024-11-22 08:00:42 -05:00
x11: Don't stall on write_async()
If a write_async() comes up while we are flushing on the background, the task will be queued, but not deemed a reason on itself to keep flushing (and finish the task) after a property delete event. To fix this, do not ever queue up write_async tasks (this leaves priv->pending_task only used for flush(), so the "flush to end" behavior in the background is consistent). We only start a background flush if there's reasons to do it, but the tasks are immediately finished. All data will still be ensured to be transfered on flush/close, this makes the caller in this situation still able to reach to it. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1198
This commit is contained in:
parent
a4596becc4
commit
655a783891
@ -384,16 +384,11 @@ meta_x11_selection_output_stream_write_async (GOutputStream *output_stream
|
|||||||
g_object_unref (task);
|
g_object_unref (task);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (!meta_x11_selection_output_stream_can_flush (stream))
|
|
||||||
{
|
|
||||||
g_assert (priv->pending_task == NULL);
|
|
||||||
priv->pending_task = task;
|
|
||||||
g_task_set_task_data (task, GSIZE_TO_POINTER (count), NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meta_x11_selection_output_stream_perform_flush (stream);
|
if (meta_x11_selection_output_stream_can_flush (stream))
|
||||||
|
meta_x11_selection_output_stream_perform_flush (stream);
|
||||||
|
|
||||||
g_task_return_int (task, count);
|
g_task_return_int (task, count);
|
||||||
g_object_unref (task);
|
g_object_unref (task);
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user