<div dir="ltr">hello Aleksander.<br><div class="gmail_extra"><div class="gmail_quote">see below.<br><br><br><span style="color:rgb(80,0,80)">On Tue, Jul 2, 2013 at 1:52 AM, Aleksander Morgado </span><span dir="ltr" style="color:rgb(80,0,80)"><<a href="mailto:aleksander@lanedo.com" target="_blank">aleksander@lanedo.com</a>></span><span style="color:rgb(80,0,80)"> wrote:</span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">
<div><div class="h5">
<blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>Hey hey,<br><br>>  plugins/altair/mm-broadband-modem-altair-lte.c | 179 +++++++++++++++++++++++--<br>>  1 file changed, 169 insertions(+), 10 deletions(-)<br>>  mode change 100644 => 100755 plugins/altair/mm-broadband-modem-altair-lte.c<br>
><br>> diff --git a/plugins/altair/mm-broadband-modem-altair-lte.c b/plugins/altair/mm-broadband-modem-altair-lte.c<br>> old mode 100644<br>> new mode 100755<br>> index a2ae2ba..c1b16f3<br>> --- a/plugins/altair/mm-broadband-modem-altair-lte.c<br>
> +++ b/plugins/altair/mm-broadband-modem-altair-lte.c<br>> @@ -51,6 +51,7 @@ G_DEFINE_TYPE_EXTENDED (MMBroadbandModemAltairLte, mm_broadband_modem_altair_lte<br>>  struct _MMBroadbandModemAltairLtePrivate {<br>>      /* Regex for bearer related notifications */<br>
>      GRegex *statcm_regex;<br>> +    GRegex *pcoinfo_regex;<br>>  };<br>><br>>  static MMIfaceModem3gpp *iface_modem_3gpp_parent;<br>> @@ -553,6 +554,19 @@ altair_statcm_changed (MMAtSerialPort *port,<br>
>  }<br>><br>>  static void<br>> +altair_pcoinfo_changed (MMAtSerialPort *port,<br>> +                        GMatchInfo *match_info,<br>> +                        MMBroadbandModemAltairLte *self)<br>> +{<br>
> +    gint cid = 0;<br><br>
Leave a full whiteline between variable declarations and first method call.<br></div></div></div></div></div></blockquote><font color="#500050"><br></font>done<br><span style="color:rgb(80,0,80)"> </span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="im"><br>> +    mm_get_int_from_match_info (match_info, 1, &cid);<br><br>

Just in case, place this mm_get_int_from_match_info() within an if().</div></div></div></div></blockquote><font color="#500050"><br></font>done<br><span style="color:rgb(80,0,80)"> </span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="im">
 <br>> +<br>> +    mm_dbg ("altair_pcoinfo_changed for cid %d", cid);<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

</blockquote>Log messages need to be readable; and the method name will already be<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>available in the log. So don't re-add the method name in the actual<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>message. Instead, just say "PCO info changed for cid %d" or something<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>like that.<br>
<div><br></div></div></div></div></div></blockquote><span style="color:rgb(80,0,80)"> </span><br>done <br><font color="#500050"><br></font><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="im">> +<br>> +    mm_iface_modem_3gpp_reload_current_vendor_pco_info (MM_IFACE_MODEM_3GPP (self), NULL, NULL);<br><br>So... we only get notification that PCO info changed, not the change itself?<br>
</div></div></div></div></blockquote><font color="#500050"><br></font>we get the change as well - but since we get it for only one PDN we need to re-evaluate the system wide PCO info we will<br>notify up - so we call for a full reload.<br>
 <br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">

<div><div class="h5"><br>> +}<br>> +<br>> +static void<br>>  set_3gpp_unsolicited_events_handlers (MMBroadbandModemAltairLte *self,<br>>                                        gboolean enable)<br>>  {<br>
> @@ -574,6 +588,14 @@ set_3gpp_unsolicited_events_handlers (MMBroadbandModemAltairLte *self,<br>>              enable ? (MMAtSerialUnsolicitedMsgFn)altair_statcm_changed : NULL,<br>>              enable ? self : NULL,<br>
>              NULL);<br>> +<br>> +        /* Vendor PCO info change */<br>> +        mm_at_serial_port_add_unsolicited_msg_handler (<br>> +            ports[i],<br>> +            self->priv->pcoinfo_regex,<br>
> +            enable ? (MMAtSerialUnsolicitedMsgFn)altair_pcoinfo_changed : NULL,<br>> +            enable ? self : NULL,<br>> +            NULL);<br>>      }<br>>  }<br>><br>> @@ -687,6 +709,12 @@ own_enable_unsolicited_events_ready (MMBaseModem *self,<br>
>      g_object_unref (simple);<br>>  }<br>><br>> +static const MMBaseModemAtCommand unsolicited_enable_sequence[] = {<br>> +    { "%STATCM=1", 5, FALSE, NULL },<br>> +    { "%PCOINFO=1", 3, FALSE, NULL },<br>
> +    { NULL }<br>> +};<br>> +<br>>  static void<br>>  parent_enable_unsolicited_events_ready (MMIfaceModem3gpp *self,<br>>                                          GAsyncResult *res,<br>> @@ -702,13 +730,12 @@ parent_enable_unsolicited_events_ready (MMIfaceModem3gpp *self,<br>
>      }<br>><br>>      /* Our own enable now */<br>> -    mm_base_modem_at_command_full (<br>> +    mm_base_modem_at_sequence_full (<br>>          MM_BASE_MODEM (self),<br>>          mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)),<br>
> -        "%STATCM=1",<br>> -        6,<br>> -        FALSE, /* allow_cached */<br>> -        FALSE, /* raw */<br>> +        unsolicited_enable_sequence,<br>> +        NULL, /* response_processor_context */<br>
> +        NULL, /* response_processor_context_free */<br>>          NULL, /* cancellable */<br>>          (GAsyncReadyCallback)own_enable_unsolicited_events_ready,<br>>          simple);<br>> @@ -781,6 +808,12 @@ own_disable_unsolicited_events_ready (MMBaseModem *self,<br>
>          simple);<br>>  }<br>><br>> +static const MMBaseModemAtCommand unsolicited_disable_sequence[] = {<br>> +    { "%STATCM=0", 5, FALSE, NULL },<br>> +    { "%PCOINFO=0", 5, FALSE, NULL },<br>
> +    { NULL }<br>> +};<br>> +<br>>  static void<br>>  modem_3gpp_disable_unsolicited_events (MMIfaceModem3gpp *self,<br>>                                         GAsyncReadyCallback callback,<br>> @@ -794,13 +827,12 @@ modem_3gpp_disable_unsolicited_events (MMIfaceModem3gpp *self,<br>
>                                          modem_3gpp_disable_unsolicited_events);<br>><br>>      /* Our own disable first */<br>> -    mm_base_modem_at_command_full (<br>> +    mm_base_modem_at_sequence_full (<br>
>          MM_BASE_MODEM (self),<br>>          mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)),<br>> -        "%STATCM=0",<br>> -        5,<br>> -        FALSE, /* allow_cached */<br>> -        FALSE, /* raw */<br>
> +        unsolicited_disable_sequence,<br>> +        NULL, /* response_processor_context */<br>> +        NULL, /* response_processor_context_free */<br>>          NULL, /* cancellable */<br>>          (GAsyncReadyCallback)own_disable_unsolicited_events_ready,<br>
>          result);<br>> @@ -893,6 +925,128 @@ modem_3gpp_load_operator_name (MMIfaceModem3gpp *self,<br>>                                callback,<br>>                                user_data);<br>>  }<br>
> +/*****************************************************************************/<br>> +/* Vendor PCO Info loading (3GPP interface) */<br>> +<br>> +static gchar *<br>> +mm_broadband_modem_altair_lte_parse_vendor_pco_info (const gchar *reply)<br>
<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
</blockquote>We should have unit tests for all these parsers, so let's add them. See<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>for example this one:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
</blockquote><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
</blockquote><a href="http://cgit.freedesktop.org/ModemManager/ModemManager/commit/?h=aleksander/huawei-ndisstatqry&id=af7564cf82b380c814ce14ca80faacd62e20585a" target="_blank">http://cgit.freedesktop.org/ModemManager/ModemManager/commit/?h=aleksander/huawei-ndisstatqry&id=af7564cf82b380c814ce14ca80faacd62e20585a</a><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

</blockquote><br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>That's a parser plus unit tests for a Huawei-specific thing.<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

</blockquote><br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>Please do the same here; move this method to a pair of new<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>"mm-modem-helpers-altair-lte.[ch]" files, rename it as<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>"mm_altair_lte_parse_vendor_pco_info", and then add unit tests for it<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>with different example replies that we get for the PCO info. You'll<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>probably need to copy some bits from the Makefile.am in that patch, as<br>
that is not yet pushed to git master.<br></div></div></div></div></div></blockquote><font color="#500050"><br></font>i will look into it - i hope for now u can accept it without this addition.<br><span style="color:rgb(80,0,80)"> </span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">
<div class="im"><br><br>> +{<br>> +    GError *inner_error = NULL;<br>> +    GRegex *r;<br>> +    GMatchInfo *match_info;<br>> +    guint cid;<br>> +    gchar *result = NULL;<br>> +<br>> +    if (!reply[0])<br>
> +        /* No APNs configured, all done */<br>> +        return NULL;<br>> +<br>> +    r = g_regex_new ("\\%PCOINFO:\\s*(\\d+)\\s*,(\\d+)\\s*(,([^,\\)]*),([0-9A-Fa-f]*))?",<br>> +                     G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW,<br>
> +                     0, &inner_error);<br>> +    if (r) {<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


</blockquote>Just g_assert (r != NULL) here instead. If you wrote the regex<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>expression well, it should never fail. Also, don't pass &inner_error,<br>
not needed in g_regex_new().<br></div></div></div></div></blockquote><font color="#500050"><br></font>done.<br><span style="color:rgb(80,0,80)"> </span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="im"><br><br>> +        g_regex_match_full (r, reply, strlen (reply), 0, 0, &match_info, &inner_error);<br>> +<br>> +        while (!inner_error && g_match_info_matches (match_info)) {<br>
> +            gchar *pco_id;<br>> +<br>> +            if (!mm_get_uint_from_match_info (match_info, 2, &cid)) {<br>> +                inner_error = g_error_new (MM_CORE_ERROR,<br>> +                                           MM_CORE_ERROR_FAILED,<br>
> +                                           "Couldn't parse CID from reply: '%s'",<br>> +                                           reply);<br>> +                break;<br>> +            }<br>
> +<br>> +            pco_id = mm_get_string_unquoted_from_match_info (match_info, 4);<br>> +<br>> +            /* If this is the first PCO info we're getting, use it. Otherwise only use CID 3<br>> +               PCO info, since this is the internet bearer. */<br>
<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
</blockquote>Missing asterisk in the comment; all comment lines should start with an<br>
asterisk.<br></div></div></div></div></blockquote><font color="#500050"><br></font>done.<br><span style="color:rgb(80,0,80)"> </span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="im"><br>> +            if (pco_id && (!result || cid == 3)) {<br>> +                gchar *pco_payload;<br>> +<br>> +                pco_payload = mm_get_string_unquoted_from_match_info (match_info, 5);<br>
> +                if (!pco_payload) {<br>> +                    inner_error = g_error_new (MM_CORE_ERROR,<br>> +                                               MM_CORE_ERROR_FAILED,<br>> +                                               "Couldn't parse PCO payload from reply: '%s'",<br>
> +                                               reply);<br>> +                    g_free (pco_id);<br>> +                    break;<br>> +                }<br>> +<br>> +                if (result) {<br>
> +                    g_free (result);<br>> +                    result = NULL;<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

</blockquote>No need to result = NULL if you're going to change it right away. You<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>can remove the if() all together and just place g_free (result); as<br>
result will start being NULL and g_free(NULL) is perfectly fine.<br></div></div></div></div></blockquote><font color="#500050"><br></font>done <br><span style="color:rgb(80,0,80)"> </span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5"><br>> +                }<br>> +<br>> +                result = g_strdup_printf ("%s%s", pco_id, pco_payload);<br>> +<br>
> +                mm_dbg ("Vendor PCO info for CID %d: '%s'", cid, result);<br>> +<br>> +                g_free (pco_id);<br>> +                g_free (pco_payload);<br>> +            } else {<br>
> +                if (pco_id)<br>> +                    mm_dbg ("Vendor PCO info for CID %d is disregarded since we already have one", cid);<br>> +                else<br>> +                    mm_dbg ("Vendor PCO info for CID %d is disregarded since it has no PCO data", cid);<br>
> +            }<br>> +<br>> +            g_match_info_next (match_info, &inner_error);<br>> +        }<br>> +<br>> +        g_match_info_free (match_info);<br>> +        g_regex_unref (r);<br>> +    }<br>
> +<br>> +    if (inner_error) {<br>> +        mm_dbg ("Error parsing %%PCOINFO response: '%s'", inner_error->message);<br>> +        g_error_free (inner_error);<br>> +        if (result) {<br>
> +            g_free (result);<br>> +            result = NULL;<br><br>

Instead of removing the error; why not propagate it to the caller?<br></div></div></div></div></div></blockquote><font color="#500050"><br></font>done <br><span style="color:rgb(80,0,80)"> </span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5"><br>> +        }<br>> +    }<br>> +<br>> +    return result;<br>> +}<br>> +<br>> +static gchar *<br>> +modem_3gpp_load_vendor_pco_info_finish (MMIfaceModem3gpp *self,<br>
> +                                        GAsyncResult *res,<br>> +                                        GError **error)<br>> +{<br>> +    const gchar *result;<br>> +    gchar *vendor_pco_info;<br>> +<br>
> +    result = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error);<br>> +    if (!result)<br>> +        return NULL;<br>> +<br>> +    vendor_pco_info = mm_broadband_modem_altair_lte_parse_vendor_pco_info (result);<br>
> +    if (vendor_pco_info)<br>> +        mm_dbg ("loaded Vendor PCO Info: %s", vendor_pco_info);<br>> +    else<br>> +        mm_dbg ("loaded empty Vendor PCO Info");<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


</blockquote>In case of error, you're returning NULL but the GError not set. If we<br><blockquote class="gmail_quote " style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">
</blockquote>return NULL, you should really set the GError. I would just propagate<br>
the GError from the parse_vendor_pco_info() message.<br></div></div></div></div></div></blockquote><span style="color:rgb(80,0,80)"> </span><br>done <br><font color="#500050"><br></font><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5"><br>> +<br>> +    return vendor_pco_info;<br>> +}<br>> +<br>> +static void<br>> +modem_3gpp_load_vendor_pco_info (MMIfaceModem3gpp *self,<br>
> +                                 GAsyncReadyCallback callback,<br>> +                                 gpointer user_data)<br>> +{<br>> +    mm_dbg ("Loading Vendor PCO Info...");<br>> +<br>> +    mm_base_modem_at_command (MM_BASE_MODEM (self),<br>
> +                              "%PCOINFO?",<br>> +                              6,<br>> +                              FALSE,<br>> +                              callback,<br>> +                              user_data);<br>
> +}<br>><br>>  /*****************************************************************************/<br>>  /* Generic ports open/close context */<br>> @@ -955,6 +1109,9 @@ mm_broadband_modem_altair_lte_init (MMBroadbandModemAltairLte *self)<br>
><br>>      self->priv->statcm_regex = g_regex_new ("\\r\\n\\%STATCM:\\s*(\\d*),?(\\d*)\\r+\\n",<br>>                                              G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);<br>> +<br>
> +    self->priv->pcoinfo_regex = g_regex_new ("\\r\\n\\%PCOINFO:\\s*(\\d*),([^,\\s]*),([^,\\s]*)\\r+\\n",<br>> +                                             G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);<br>
<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
</blockquote>You're missing a g_regex_unref() for this GRegex; possibly in dispose()<br>
or finalize().<br></div></div></div></div></div></blockquote><font color="#500050"><br></font>done <br><span style="color:rgb(80,0,80)"> </span><br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="im"><br>>  }<br>><br>>  static void<br>> @@ -1028,6 +1185,8 @@ iface_modem_3gpp_init (MMIfaceModem3gpp *iface)<br>>      iface->load_operator_code_finish = modem_3gpp_load_operator_code_finish;<br>
>      iface->load_operator_name = modem_3gpp_load_operator_name;<br>>      iface->load_operator_name_finish = modem_3gpp_load_operator_name_finish;<br>> +    iface->load_vendor_pco_info = modem_3gpp_load_vendor_pco_info;<br>
> +    iface->load_vendor_pco_info_finish = modem_3gpp_load_vendor_pco_info_finish;<br>><br>>  }<br>><br>><br><br><br>--<br>
<span><font color="#888888">Aleksander<br>
</font></span></div></div></div></div>
</blockquote></div><br></div></div>