Hi Martin,

> huawei_disconnect is used to recovery the io and gprs context when
> io error happends, see commit 39382730d7758b093ca6271f4e9dea875fa04b3a
> However, io error not only happends at PPP disconnect, in theory it
> can happends at any situation. I also observed that it happens when modem
> go into offline mode at my Huawei EM770W modem. in this case, gprs should
> not be reopened.

<snip>

>  static void huawei_set_online(struct ofono_modem *modem, ofono_bool_t online,
> @@ -595,21 +611,26 @@ static void huawei_set_online(struct ofono_modem 
> *modem, ofono_bool_t online,
>  {
>       struct huawei_data *data = ofono_modem_get_data(modem);
>       GAtChat *chat = data->pcui;
> -     struct cb_data *cbd = cb_data_new(cb, user_data);
> +     struct huawei_cb_data *online_cbd;
>       char const *command = online ? "AT+CFUN=1" : "AT+CFUN=5";
>  
>       DBG("modem %p %s", modem, online ? "online" : "offline");
>  
> -     if (cbd == NULL)
> +     online_cbd = g_try_new0(struct huawei_cb_data, 1);
> +     online_cbd->cbd = cb_data_new(cb, user_data);
> +     if (online_cbd->cbd == NULL)
>               goto error;

you know that you are doing exactly the wrong NULL pointer checks
here ;)

Anyhow, we need to get rid of the if (cbd == NULL) check first. A while
back we changed cb_data_new() to use g_new0() instead of g_try_new0() to
simplify the code. So first that should be all cleaned up.

A quick grep showed these locations for the AT modems:

drivers/mbmmodem/location-reporting.c:  if (cbd == NULL)
plugins/bluetooth.c:    if (cbd == NULL) {
plugins/huawei.c:       if (cbd == NULL)

The ISI modem stuff is a different story and needs to be tackled
separately anyway.

Regards

Marcel


_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to