Pino Toscano
2020-Aug-05 14:45 UTC
[Libguestfs] [v2v PATCH] libosinfo: remove auto-cleanup for OsinfoList
Avoid using an auto-cleanup for OsinfoList, duplicating the cleanup everywhere needed. --- v2v/libosinfo-c.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/v2v/libosinfo-c.c b/v2v/libosinfo-c.c index 322e7d3d..75c2fae4 100644 --- a/v2v/libosinfo-c.c +++ b/v2v/libosinfo-c.c @@ -49,17 +49,6 @@ #if !IS_LIBOSINFO_VERSION(1, 8, 0) G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoFilter, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoLoader, g_object_unref) -/* - * Because of a bug in OsinfoList in libosinfo 1.7.0 (fixed in 1.8.0), - * and a glib auto-cleanup addition for Module classes in 2.63.3, - * avoid declaring this when: - * - libosinfo is >= 1.7.0 and < 1.8.0 - * - glib is >= 2.63.3 - * (the 1.8.0 check is not done, as already covered by the check above) - */ -#if !IS_LIBOSINFO_VERSION(1, 7, 0) || !GLIB_CHECK_VERSION(2, 63, 3) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoList, g_object_unref) -#endif G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoOsList, g_object_unref) #endif @@ -157,7 +146,7 @@ v2v_osinfo_os_find_os_by_short_id (value dbv, value osv) CAMLlocal1 (rv); g_autoptr(OsinfoFilter) filter = NULL; g_autoptr(OsinfoOsList) os_list = NULL; - g_autoptr(OsinfoList) list = NULL; + OsinfoList *list; OsinfoOs *os; os_list = osinfo_db_get_os_list (OsinfoDb_t_val (dbv)); @@ -165,11 +154,14 @@ v2v_osinfo_os_find_os_by_short_id (value dbv, value osv) osinfo_filter_add_constraint (filter, OSINFO_PRODUCT_PROP_SHORT_ID, String_val (osv)); list = osinfo_list_new_filtered (OSINFO_LIST(os_list), filter); - if (osinfo_list_get_length (list) == 0) + if (osinfo_list_get_length (list) == 0) { + g_object_unref (list); caml_raise_not_found (); + } os = OSINFO_OS(osinfo_list_get_nth (list, 0)); rv = Val_OsinfoOs_t (dbv, os); + g_object_unref (list); CAMLreturn (rv); } -- 2.26.2
Richard W.M. Jones
2020-Aug-05 15:47 UTC
Re: [Libguestfs] [v2v PATCH] libosinfo: remove auto-cleanup for OsinfoList
On Wed, Aug 05, 2020 at 04:45:52PM +0200, Pino Toscano wrote:> Avoid using an auto-cleanup for OsinfoList, duplicating the cleanup > everywhere needed. > --- > v2v/libosinfo-c.c | 18 +++++------------- > 1 file changed, 5 insertions(+), 13 deletions(-) > > diff --git a/v2v/libosinfo-c.c b/v2v/libosinfo-c.c > index 322e7d3d..75c2fae4 100644 > --- a/v2v/libosinfo-c.c > +++ b/v2v/libosinfo-c.c > @@ -49,17 +49,6 @@ > #if !IS_LIBOSINFO_VERSION(1, 8, 0) > G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoFilter, g_object_unref) > G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoLoader, g_object_unref) > -/* > - * Because of a bug in OsinfoList in libosinfo 1.7.0 (fixed in 1.8.0), > - * and a glib auto-cleanup addition for Module classes in 2.63.3, > - * avoid declaring this when: > - * - libosinfo is >= 1.7.0 and < 1.8.0 > - * - glib is >= 2.63.3 > - * (the 1.8.0 check is not done, as already covered by the check above) > - */ > -#if !IS_LIBOSINFO_VERSION(1, 7, 0) || !GLIB_CHECK_VERSION(2, 63, 3) > -G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoList, g_object_unref) > -#endif > G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoOsList, g_object_unref) > #endif > > @@ -157,7 +146,7 @@ v2v_osinfo_os_find_os_by_short_id (value dbv, value osv) > CAMLlocal1 (rv); > g_autoptr(OsinfoFilter) filter = NULL; > g_autoptr(OsinfoOsList) os_list = NULL; > - g_autoptr(OsinfoList) list = NULL; > + OsinfoList *list; > OsinfoOs *os; > > os_list = osinfo_db_get_os_list (OsinfoDb_t_val (dbv)); > @@ -165,11 +154,14 @@ v2v_osinfo_os_find_os_by_short_id (value dbv, value osv) > osinfo_filter_add_constraint (filter, OSINFO_PRODUCT_PROP_SHORT_ID, String_val (osv)); > list = osinfo_list_new_filtered (OSINFO_LIST(os_list), filter); > > - if (osinfo_list_get_length (list) == 0) > + if (osinfo_list_get_length (list) == 0) { > + g_object_unref (list); > caml_raise_not_found (); > + } > > os = OSINFO_OS(osinfo_list_get_nth (list, 0)); > rv = Val_OsinfoOs_t (dbv, os); > + g_object_unref (list); > > CAMLreturn (rv); > }ACK Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top
Possibly Parallel Threads
- [v2v PATCH v2 0/3] Use libosinfo for query device drivers
- [v2v PATCH 0/3] Use libosinfo for query device drivers
- [v2v PATCH v2] libosinfo: do not declare OsinfoList auto-cleanup in certain situations
- [v2v PATCH] libosinfo: declare autocleanup funcs with libosinfo < 1.8.0
- [v2v PATCH] libosinfo: declare OsinfoList auto-cleanup with glib < 2.63.3