summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2013-08-06 10:15:35 -0700
committerKristian Høgsberg <krh@bitplanet.net>2013-08-06 10:16:46 -0700
commitdbeb5134fa8e612826d7c7d5b9146e89822c59fb (patch)
tree61827593527a814afe01efc6eb0dab0258dd5753
parent1b0cabfc48cf4c13fec95f749d3b44050fe9ff79 (diff)
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.
-rw-r--r--src/wayland-server.c18
1 files 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);