From 2e73e5eef98965b7b568955e64c510e5d4544447 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 15 Mar 2016 21:49:26 -0700 Subject: [PATCH] GUAC-1164: Dispose of layers/buffers when display/cursor are freed. --- src/common/guac_cursor.c | 14 +++++++++++--- src/common/guac_display.c | 3 +++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/common/guac_cursor.c b/src/common/guac_cursor.c index 55a01bf8..7c309b9f 100644 --- a/src/common/guac_cursor.c +++ b/src/common/guac_cursor.c @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -70,13 +71,20 @@ guac_common_cursor* guac_common_cursor_alloc(guac_client* client) { void guac_common_cursor_free(guac_common_cursor* cursor) { + guac_client* client = cursor->client; + guac_layer* layer = cursor->layer; + cairo_surface_t* surface = cursor->surface; + /* Free image buffer and surface */ free(cursor->image_buffer); - if (cursor->surface != NULL) - cairo_surface_destroy(cursor->surface); + if (surface != NULL) + cairo_surface_destroy(surface); + + /* Destroy layer within remotely-connected client */ + guac_protocol_send_dispose(client->socket, layer); /* Return layer to pool */ - guac_client_free_layer(cursor->client, cursor->layer); + guac_client_free_layer(client, layer); free(cursor); diff --git a/src/common/guac_display.c b/src/common/guac_display.c index 5a918e7d..4ea9652d 100644 --- a/src/common/guac_display.c +++ b/src/common/guac_display.c @@ -84,6 +84,9 @@ static void guac_common_display_free_layers(guac_common_display_layer* layers, /* Free surface */ guac_common_surface_free(current->surface); + /* Destroy layer within remotely-connected client */ + guac_protocol_send_dispose(client->socket, layer); + /* Free layer or buffer depending on index */ if (layer->index < 0) guac_client_free_buffer(client, layer);