From 768dfa2139f9959daffcd4cac5128c13bff461ad Mon Sep 17 00:00:00 2001 From: Frediano Ziglio Date: Mon, 30 Nov 2015 18:06:34 +0000 Subject: [PATCH] worker: do not use dynamic memory for RedSurfaceCmd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allocation on stack is sufficient and code is more similar to QXL_CMD_MESSAGE and QXL_CMD_UPDATE cases. Signed-off-by: Frediano Ziglio Acked-by: Fabiano FidĂȘncio --- server/display-channel.c | 5 +---- server/red_worker.c | 9 +++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/server/display-channel.c b/server/display-channel.c index ba391745..e9e3770e 100644 --- a/server/display-channel.c +++ b/server/display-channel.c @@ -2078,7 +2078,7 @@ void display_channel_process_surface_cmd(DisplayChannel *display, RedSurfaceCmd surface_id = surface->surface_id; if SPICE_UNLIKELY(surface_id >= display->n_surfaces) { - goto exit; + return; } red_surface = &display->surfaces[surface_id]; @@ -2116,9 +2116,6 @@ void display_channel_process_surface_cmd(DisplayChannel *display, RedSurfaceCmd default: spice_warn_if_reached(); }; -exit: - red_put_surface_cmd(surface); - free(surface); } void display_channel_update_compression(DisplayChannel *display, DisplayChannelClient *dcc) diff --git a/server/red_worker.c b/server/red_worker.c index 81b7fdc8..b10b52ea 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -329,15 +329,16 @@ static int red_process_commands(RedWorker *worker, uint32_t max_pipe_size, int * break; } case QXL_CMD_SURFACE: { - RedSurfaceCmd *surface = spice_new0(RedSurfaceCmd, 1); + RedSurfaceCmd surface; if (red_get_surface_cmd(&worker->mem_slots, ext_cmd.group_id, - surface, ext_cmd.cmd.data)) { - free(surface); + &surface, ext_cmd.cmd.data)) { break; } - display_channel_process_surface_cmd(worker->display_channel, surface, + display_channel_process_surface_cmd(worker->display_channel, &surface, ext_cmd.group_id, FALSE); + // do not release resource as is released inside red_process_surface + red_put_surface_cmd(&surface); break; } default: