[RFC wayland 14/18] shm: properly resize remote buffers
Derek Foreman
derekf at osg.samsung.com
Tue Feb 9 16:56:01 UTC 2016
When shm buffers are remote the server library will create empty fds for
them. We need to handle resizing of that for both pool creation and
resize (in a local connection this is done by the client app)
Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
---
src/wayland-shm.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/wayland-shm.c b/src/wayland-shm.c
index 911165d..d6566bf 100644
--- a/src/wayland-shm.c
+++ b/src/wayland-shm.c
@@ -42,6 +42,7 @@
#include "wayland-private.h"
#include "wayland-server.h"
+#include "wayland-os.h"
/* This once_t is used to synchronize installing the SIGBUS handler
* and creating the TLS key. This will be done in the first call
@@ -201,6 +202,9 @@ shm_pool_resize(struct wl_client *client, struct wl_resource *resource,
struct wl_shm_pool *pool = wl_resource_get_user_data(resource);
void *data;
+ if (wl_client_is_remote(client))
+ wl_os_resize_file(pool->fd, size);
+
if (size < pool->size) {
wl_resource_post_error(resource,
WL_SHM_ERROR_INVALID_FD,
@@ -232,6 +236,9 @@ shm_create_pool(struct wl_client *client, struct wl_resource *resource,
{
struct wl_shm_pool *pool;
+ if (wl_client_is_remote(client))
+ wl_os_resize_file(fd, size);
+
pool = malloc(sizeof *pool);
if (pool == NULL) {
wl_client_post_no_memory(client);
--
2.7.0
More information about the wayland-devel
mailing list