diff options
| author | Benjamin Otte <otte@redhat.com> | 2021-10-28 14:48:20 +0200 |
|---|---|---|
| committer | Benjamin Otte <otte@redhat.com> | 2021-10-28 14:48:20 +0200 |
| commit | 9962ef9ac44a405df17d73bf959be73076e5603d (patch) | |
| tree | 9f7893f392a31a58c40b3ef451d82b1f85e68347 | |
| parent | c97a758aa772fc6411a7fa88fdcda49dcdba132e (diff) | |
| download | gtk+-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.c | 21 |
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); |
