summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2021-10-28 14:48:20 +0200
committerBenjamin Otte <otte@redhat.com>2021-10-28 14:48:20 +0200
commit9962ef9ac44a405df17d73bf959be73076e5603d (patch)
tree9f7893f392a31a58c40b3ef451d82b1f85e68347
parentc97a758aa772fc6411a7fa88fdcda49dcdba132e (diff)
downloadgtk+-9962ef9ac44a405df17d73bf959be73076e5603d.tar.gz
broadway: fix texture upload
This was carelessly broken by me in 5b473911. While fixing it anyway, at some support for better error handling. Fixes #4381
-rw-r--r--gdk/broadway/gdkbroadway-server.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/gdk/broadway/gdkbroadway-server.c b/gdk/broadway/gdkbroadway-server.c
index 4ce17727cd..bd221f5442 100644
--- a/gdk/broadway/gdkbroadway-server.c
+++ b/gdk/broadway/gdkbroadway-server.c
@@ -620,21 +620,28 @@ gdk_broadway_server_upload_texture (GdkBroadwayServer *server,
gsize size;
int fd;
- id = server->next_texture_id++;
-
bytes = gdk_texture_save_to_png_bytes (texture);
fd = open_shared_memory ();
data = g_bytes_get_data (bytes, &size);
- while (size)
+ id = server->next_texture_id++;
+
+ msg.id = id;
+ msg.offset = 0;
+ msg.size = 0;
+
+ while (msg.size < size)
{
- gssize ret = write (fd, data, size);
+ gssize ret = write (fd, data + msg.size, size - msg.size);
if (ret <= 0)
- break;
+ {
+ if (errno == EINTR)
+ continue;
+ break;
+ }
- size -= ret;
- data += ret;
+ msg.size += ret;
}
g_bytes_unref (bytes);