Hi Jukka, > The data for new service was saved into disk (with Favorite=false) > even if the first connection failed. This is now changed and > service data is only saved if user has been able to connect to a > service at least once. > --- > src/service.c | 33 ++++++++++++++++++++++++++++++--- > 1 files changed, 30 insertions(+), 3 deletions(-) > > diff --git a/src/service.c b/src/service.c > index d14431a..59dfbcc 100644 > --- a/src/service.c > +++ b/src/service.c > @@ -116,6 +116,7 @@ struct connman_service { > connman_bool_t wps; > int online_check_count; > connman_bool_t do_split_routing; > + connman_bool_t new_service; > }; > > struct find_data { > @@ -322,8 +323,11 @@ static int service_load(struct connman_service *service) > DBG("service %p", service); > > keyfile = connman_storage_load_service(service->identifier); > - if (keyfile == NULL) > + if (keyfile == NULL) { > + service->new_service = TRUE; > return -EIO; > + } else > + service->new_service = FALSE; > > switch (service->type) { > case CONNMAN_SERVICE_TYPE_UNKNOWN: > @@ -496,7 +500,10 @@ static int service_save(struct connman_service *service) > const char *cst_str = NULL; > int err = 0; > > - DBG("service %p", service); > + DBG("service %p new %d", service, service->new_service); > + > + if (service->new_service == TRUE) > + return -ESRCH; > > keyfile = __connman_storage_open_service(service->identifier); > if (keyfile == NULL) > @@ -4487,7 +4494,12 @@ static int service_indicate_state(struct > connman_service *service) > } > > if (new_state == CONNMAN_SERVICE_STATE_CONFIGURATION) { > - if (__connman_stats_service_register(service) == 0) { > + if (service->new_service == FALSE && > + __connman_stats_service_register(service) == 0) {
the indentation is off here. > + /* > + * For new services the statistics are updated after > + * we have successfully connected. > + */ > __connman_stats_get(service, FALSE, > &service->stats.data); > __connman_stats_get(service, TRUE, > @@ -4508,6 +4520,21 @@ static int service_indicate_state(struct > connman_service *service) > if (new_state == CONNMAN_SERVICE_STATE_READY) { > enum connman_ipconfig_method method; > > + if (service->new_service == TRUE && > + __connman_stats_service_register(service) == 0) { > + /* > + * This is normally done after configuring state > + * but for new service do this after we have connected > + * successfully. > + */ > + __connman_stats_get(service, FALSE, > + &service->stats.data); > + __connman_stats_get(service, TRUE, > + &service->stats_roaming.data); > + } > + > + service->new_service = FALSE; > + > service_update_preferred_order(def_service, service, new_state); > > set_reconnect_state(service, TRUE); Otherwise the patch looks fine with me, but we might wanna start splitting this into smaller functions to make it more readable. Regards Marcel _______________________________________________ connman mailing list connman@connman.net http://lists.connman.net/listinfo/connman