[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