When a wayland compositor gets an EAGAIN error whenever
sending or receiving event(s) to a client in the
wl_closure_send() or the wl_closure_queue(), the error
variable of the wl_client for the client will be set to
true and the client is going to be killed by the
compositor later soon. This patch fixes the problem by
updating the socket fd's event mask as we're doing
in wl_display_flush_clients() for having another chance
to do it again.

Actually, this kind of problem can be watched in an
environment in which massive input events are coming
from multi-touch screen or multi-pen devices. In this
kind of environment, a client receiving the massive
input events are trying to drawing something very hard
but it's being killed sooner or later. With the given
patch, the client receiving the input events is not being
destroyed and is working well even though it doesn't get
the whole input events from the compositor.

Signed-off-by: jeon <[email protected]>

---
 src/wayland-server.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/wayland-server.c b/src/wayland-server.c
index eae8d2e..5afaa28 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -222,8 +222,15 @@ handle_array(struct wl_resource *resource, uint32_t opcode,
 
        log_closure(resource, closure, true);
 
-       if (send_func(closure, resource->client->connection))
-               resource->client->error = 1;
+       if (send_func(closure, resource->client->connection)) {
+               if (errno == EAGAIN) {
+                       wl_event_source_fd_update(resource->client->source,
+                                                 WL_EVENT_WRITABLE |
+                                                 WL_EVENT_READABLE);
+               } else {
+                       resource->client->error = 1;
+               }
+       }
 
        wl_closure_destroy(closure);
 }

--
2.7.4

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to