[Spice-devel] [PATCH spice-server v2 00/23] Use GLib memory allocation

Christophe de Dinechin cdupontd at redhat.com
Wed Sep 20 12:54:31 UTC 2017



> On 20 Sep 2017, at 11:53, Frediano Ziglio <fziglio at redhat.com> wrote:
> 
>>> 
>>> On 20 Sep 2017, at 09:50, Frediano Ziglio <fziglio at redhat.com> wrote:
>>> 
>>> Reduce the usage of spice_new*/spice_malloc* allocations.
>>> They were designed in a similar way to GLib ones.
>>> Now that we use GLib make sense to remove them.
>>> However the versions we support for GLib can use different memory
>>> allocators so we have to match g_free with GLib allocations
>>> and spice_* ones (which uses always malloc allocator) with free().
>>> 
>>> The final target is to remove spice_new*/spice_malloc*
>>> functions/helper from spice-common.
>> 
>> I am a bit ambivalent about this kind of source-level replacement. Why not
>> simply #define spice_malloc to glib_malloc?
>> 
> 
> Does not work as you need to change free according where needed.

But you need to change free calls in your patch too, right?

> Unless you add a spice_free too (and change required free calls).

Well, if we change things, I’d rather change them in that direction, yes.

> But the spice_XXX functions were designed like GLib so would cause some
> confusion having 2 sets of functions potentially using different pools.

This is a problem you already need to address in your patch, if I’m not mistaken.

> 
>> The benefit of doing it that way (in addition to requiring less source code
>> changes and making following rebases or merge much easier) is that it leaves
>> the option to instrument spice allocations specifically when the need
>> arises.
>> 
> 
> There are many tools to instruments memory allocations and is not hard
> to write one on your own. For instance knowing that objects file takes
> precedence over libraries you can write a module defining malloc, or use
> --wrap linker option or LD_PRELOAD.

That works if you want to instrument all malloc calls. If you want to do
something specific to spice, you can’t do that.

> 
>>> 
>>> This series finish changing all allocations from spice_XXX
>>> to Glib memory functions (tests excluded).
>>> 
>>> You will notice some patches have changes only in allocation part
>>> without any free. This means code has leaks, not a regression.
>>> 
>>> If you check the code there is still a spice_malloc_n call in
>>> display-channel.c. This is required as the memory is freed by
>>> spice-common with a normal free.
>>> 
>>> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
>>> 
>>> Frediano Ziglio (23):
>>> lz4-encoder: Use GLib memory functions
>>> mjpeg: Use GLib memory functions
>>> reds-stream: Use GLib memory functions
>>> smartcard: Use GLib memory functions
>>> stream: Use GLib memory functions
>>> spicevmc: Use GLib memory functions
>>> gstreamer-encoder: Use GLib memory functions
>>> char-device: Use GLib memory functions
>>> event-loop: Use GLib memory functions
>>> dispatcher: Use GLib memory functions
>>> Use GLib memory functions for SpiceChannelEventInfo
>>> reds: Use GLib memory functions for link message
>>> reds: Use GLib memory functions for ChannelSecurityOptions
>>> dcc: Use GLib memory functions
>>> display-channel: Use GLib memory functions
>>> replay-qxl: Use GLib memory functions
>>> worker: Use GLib memory functions
>>> tree: Use GLib memory functions
>>> inputs-channel: Use GLib memory functions
>>> image-cache: Use GLib memory functions
>>> pixmap-cache: Use GLib memory functions
>>> parse-qxl: Use GLib memory functions
>>> red-pipe-item: Use GLib memory functions
>>> 
>>> server/cache-item.tmpl.c          |  6 ++---
>>> server/char-device.c              | 12 +++++-----
>>> server/cursor-channel.c           |  2 +-
>>> server/dcc.c                      | 40 ++++++++++++++++----------------
>>> server/dispatcher.c               |  4 ++--
>>> server/display-channel.c          |  6 ++---
>>> server/event-loop.c               |  8 +++----
>>> server/gstreamer-encoder.c        | 16 ++++++-------
>>> server/image-cache.c              |  4 ++--
>>> server/inputs-channel.c           | 10 ++++----
>>> server/lz4-encoder.c              |  8 +++----
>>> server/main-channel-client.c      | 14 ++++++------
>>> server/mjpeg-encoder.c            | 28 +++++++++++------------
>>> server/pixmap-cache.c             |  6 ++---
>>> server/red-channel-client.c       |  8 +++----
>>> server/red-channel.c              |  2 +-
>>> server/red-parse-qxl.c            | 46
>>> ++++++++++++++++++-------------------
>>> server/red-pipe-item.c            |  2 +-
>>> server/red-replay-qxl.c           | 48
>>> +++++++++++++++++++--------------------
>>> server/red-worker.c               |  8 +++----
>>> server/reds-stream.c              | 39 ++++++++++++-------------------
>>> server/reds.c                     | 14 ++++++------
>>> server/smartcard-channel-client.c |  2 +-
>>> server/smartcard.c                | 14 ++++++------
>>> server/spicevmc.c                 | 24 ++++++++++----------
>>> server/stream.c                   |  8 +++----
>>> server/tree.c                     |  8 +++----
>>> 27 files changed, 189 insertions(+), 198 deletions(-)



More information about the Spice-devel mailing list