qga/commands-win32.c | 1 + 1 file changed, 1 insertion(+)
The g_regex_match function creates match_info even if it
returns FALSE. So we should always call g_match_info_free.
Signed-off-by: Kostiantyn Kostiuk <konstantin@daynix.com>
---
qga/commands-win32.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 300b87c859..e8bc3df306 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -2497,6 +2497,7 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
GMatchInfo *match_info;
GuestDeviceIdPCI *id;
if (!g_regex_match(device_pci_re, hw_ids[j], 0, &match_info)) {
+ g_match_info_free(match_info);
continue;
}
skip = false;
--
2.25.1
Hi
On Thu, Jun 10, 2021 at 6:38 PM Kostiantyn Kostiuk <konstantin@daynix.com>
wrote:
> The g_regex_match function creates match_info even if it
> returns FALSE. So we should always call g_match_info_free.
>
> Signed-off-by: Kostiantyn Kostiuk <konstantin@daynix.com>
> ---
> qga/commands-win32.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 300b87c859..e8bc3df306 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -2497,6 +2497,7 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error
> **errp)
> GMatchInfo *match_info;
>
What about using g_autoptr instead?
GuestDeviceIdPCI *id;
> if (!g_regex_match(device_pci_re, hw_ids[j], 0, &match_info))
> {
> + g_match_info_free(match_info);
> continue;
> }
> skip = false;
> --
> 2.25.1
>
>
>
--
Marc-André Lureau
Hi All,
For freeing GMatchInfo struct, a special function is required. I'm not sure is
it possible to use g_autoptr in this case or no.
In GLib example
https://developer.gnome.org/glib/stable/glib-Perl-compatible-regular-expressions.html#g-regex-match,
g_match_info_free is used directly.
Best wishes,
Kostiantyn Kostiuk
On Thu, Jun 10, 2021 at 5:41 PM Marc-André Lureau <
marcandre.lureau@gmail.com> wrote:
> Hi
>
> On Thu, Jun 10, 2021 at 6:38 PM Kostiantyn Kostiuk <konstantin@daynix.com>
> wrote:
>
>> The g_regex_match function creates match_info even if it
>> returns FALSE. So we should always call g_match_info_free.
>>
>> Signed-off-by: Kostiantyn Kostiuk <konstantin@daynix.com>
>> ---
>> qga/commands-win32.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
>> index 300b87c859..e8bc3df306 100644
>> --- a/qga/commands-win32.c
>> +++ b/qga/commands-win32.c
>> @@ -2497,6 +2497,7 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error
>> **errp)
>> GMatchInfo *match_info;
>>
>
> What about using g_autoptr instead?
>
> GuestDeviceIdPCI *id;
>> if (!g_regex_match(device_pci_re, hw_ids[j], 0,
>> &match_info)) {
>> + g_match_info_free(match_info);
>> continue;
>> }
>> skip = false;
>> --
>> 2.25.1
>>
>>
>>
>
> --
> Marc-André Lureau
>
On Thu, Jun 10, 2021 at 05:53:35PM +0300, Konstantin Kostiuk wrote: > Hi All, > > For freeing GMatchInfo struct, a special function is required. I'm not sure is > it possible to use g_autoptr in this case or no. > In GLib example > https://developer.gnome.org/glib/stable/glib-Perl-compatible-regular-expressions.html#g-regex-match, > g_match_info_free is used directly. That is fine - g_autoptr calls the required deallocation function that was previously registered. This is different from g_autofree which merely calls g_free. We can see GMatchInfo is configured to call g_match_info_free: $ grep GMatchIn /usr/include/glib-2.0/glib/*.h /usr/include/glib-2.0/glib/glib-autocleanups.h:G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMatchInfo, g_match_info_unref) 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 :|
Thanks, Daniel! A new patch was sent. Best wishes, Kostiantyn Kostiuk On Thu, Jun 10, 2021 at 6:23 PM Daniel P. Berrangé <berrange@redhat.com> wrote: > On Thu, Jun 10, 2021 at 05:53:35PM +0300, Konstantin Kostiuk wrote: > > Hi All, > > > > For freeing GMatchInfo struct, a special function is required. I'm not > sure is > > it possible to use g_autoptr in this case or no. > > In GLib example > > > https://developer.gnome.org/glib/stable/glib-Perl-compatible-regular-expressions.html#g-regex-match > , > > g_match_info_free is used directly. > > That is fine - g_autoptr calls the required deallocation function > that was previously registered. This is different from g_autofree > which merely calls g_free. > > We can see GMatchInfo is configured to call g_match_info_free: > > $ grep GMatchIn /usr/include/glib-2.0/glib/*.h > /usr/include/glib-2.0/glib/glib-autocleanups.h:G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMatchInfo, > g_match_info_unref) > > > 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 :| > >
© 2016 - 2025 Red Hat, Inc.