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 :|