On Wed, May 19, 2021 at 10:30:30PM +0200, Olaf Hering wrote:
Currently src/libxl/ allocates a bunch of buffers with variants of
g_new0() or g_strdup(), which will be consumed by libxenlight.so. Once the objects which
contain these buffers are not needed anymore, libxenlight.so will release them with
ordinary calls to free() in its *_dispose() API. In other words: libxenlight.so does not
use glib.
While the g_malloc docs of today's glib state that (apparently) the mistake of using
a private allocator was recognized and corrected in glib 2.46, the same mistake might
occur again in the future.
GLib used to have APIs that let you inject a custom malloc impl.
They deprecated and then removed the impl for this, and hardcoded
GLib to always use the system malloc. IIUC the main reason for this
was the increasing use of __constructor__ functions in libraries.
It is not practical to have something in main() which configures a
replacement malloc impl, because by that point many GLib functions
will have already been called using the system malloc.
IOW, if you want to replace the system malloc you need to do it
process-wide by explicitly linking to a library that overrides
the standard C library malloc() APIs.
When libvirt adopted glib, I confirmed the long term plans with
GLib maintainers and got them to add a docs note to make this
explicit:
"Since GLib 2.46 g_malloc() is hardcoded to always use
the system malloc implementation."
https://developer.gnome.org/glib/2.64/glib-Memory-Allocation.html
So, there's no need to worry about free/g_free, they are guaranteed
identical.
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|