From dbeb5134fa8e612826d7c7d5b9146e89822c59fb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Tue, 6 Aug 2013 10:15:35 -0700 Subject: [PATCH] server: Set client->error when we fail to send a closure We we're using wl_event_loop_add_idle() here, but if we're failing because of OOM, that will typically also fail. Instead, use the existing client->error flag, which will break out of the event handling loop and shut down the client. --- src/wayland-server.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/wayland-server.c b/src/wayland-server.c index b74f87a..824f9d1 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -116,14 +116,6 @@ struct wl_resource { static int wl_debug = 0; -static void -destroy_client(void *data) -{ - struct wl_client *client = data; - - wl_client_destroy(client); -} - WL_EXPORT void wl_resource_post_event(struct wl_resource *resource, uint32_t opcode, ...) { @@ -137,13 +129,12 @@ wl_resource_post_event(struct wl_resource *resource, uint32_t opcode, ...) va_end(ap); if (closure == NULL) { - resource->client->error = 1 + resource->client->error = 1; return; } if (wl_closure_send(closure, resource->client->connection)) - wl_event_loop_add_idle(resource->client->display->loop, - destroy_client, resource->client); + resource->client->error = 1; if (wl_debug) wl_closure_print(closure, object, true); @@ -165,13 +156,12 @@ wl_resource_queue_event(struct wl_resource *resource, uint32_t opcode, ...) va_end(ap); if (closure == NULL) { - resource->client->error = 1 + resource->client->error = 1; return; } if (wl_closure_queue(closure, resource->client->connection)) - wl_event_loop_add_idle(resource->client->display->loop, - destroy_client, resource->client); + resource->client->error = 1; if (wl_debug) wl_closure_print(closure, object, true); -- 2.7.4