[Spice-devel] [PATCH 1/4] replay: remove some memory leaks

Christophe Fergeau cfergeau at redhat.com
Thu Aug 27 08:56:06 PDT 2015


On Mon, Aug 24, 2015 at 02:20:27PM +0100, Frediano Ziglio wrote:
> Free primary surface memory after creation.
> Free command line options.
> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/red_replay_qxl.c | 1 +
>  server/tests/replay.c   | 6 ++++++
>  2 files changed, 7 insertions(+)
> 
> diff --git a/server/red_replay_qxl.c b/server/red_replay_qxl.c
> index a010a58..ca1d584 100644
> --- a/server/red_replay_qxl.c
> +++ b/server/red_replay_qxl.c
> @@ -1074,6 +1074,7 @@ static void replay_handle_create_primary(QXLWorker *worker, SpiceReplay *replay)
>      surface.group_id = 0;
>      surface.mem = (QXLPHYSICAL)mem;
>      worker->create_primary_surface(worker, 0, &surface);
> +    free(mem);

Isn't worker->create_primary_surface() going through
red_dispatcher_create_primary_surface_sync() which will copy 'surface'
including the address stored in surface.mem,  and then use
dispatcher_send_message() to send this to a different thread? If this is
the case, free(mem) right after this call is racy.
Or is the replay code doing something different there?

>  }
>  
>  static void replay_handle_dev_input(QXLWorker *worker, SpiceReplay *replay,
> diff --git a/server/tests/replay.c b/server/tests/replay.c
> index 01590c0..c35cb52 100644
> --- a/server/tests/replay.c
> +++ b/server/tests/replay.c
> @@ -286,12 +286,16 @@ int main(int argc, char **argv)
>          g_printerr("%s\n", g_option_context_get_help(context, TRUE, NULL));
>          exit(1);
>      }
> +    g_option_context_free(context);
> +    context = NULL;
>  
>      if (strncmp(file[0], "-", 1) == 0) {
>          fd = stdin;
>      } else {
>          fd = fopen(file[0], "r");
>      }
> +    g_strfreev(file);
> +    file = NULL;
>      if (fd == NULL) {
>          g_printerr("error opening %s\n", argv[1]);
>          return 1;
> @@ -325,6 +329,8 @@ int main(int argc, char **argv)
>      if (client) {
>          start_client(client, &error);
>          wait = TRUE;
> +        g_free(client);
> +        client = NULL;
>      }

I would not add the xxxx = NULL; lines as this makes things harder to
read for little gain in my opinion, but ACK this way.

Christophe

>  
>      if (!wait) {
> -- 
> 2.4.3
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150827/461090bc/attachment.sig>


More information about the Spice-devel mailing list