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.
This commit is contained in:
Kristian Høgsberg 2013-08-06 10:15:35 -07:00
parent 1b0cabfc48
commit dbeb5134fa

View file

@ -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);