diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-05-23 21:40:20 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-05-26 13:14:52 +0000 |
commit | e096b50208cfceb0c3e7156db344f6b19485f13a (patch) | |
tree | a3bff528f97f371ca82fb14a1491b9c3f64fa4c7 /src/mm-iface-modem.c | |
parent | e4f7da5624dc1dfc20373bf77bfc4f3309bacb61 (diff) |
iface-modem,bearer-list: sync all bearers one after the other
Do not launch N checks for N bearers and ignore their result. Instead,
go one by one, and report errors one by one.
Diffstat (limited to 'src/mm-iface-modem.c')
-rw-r--r-- | src/mm-iface-modem.c | 49 |
1 files changed, 39 insertions, 10 deletions
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index aff7a7a9..d384738a 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -4272,19 +4272,49 @@ sync_detect_sim_swap_ready (MMIfaceModem *self, } static void -reload_bearers (MMIfaceModem *self) +sync_all_bearers_ready (MMBearerList *bearer_list, + GAsyncResult *res, + GTask *task) { - g_autoptr(MMBearerList) list = NULL; + MMIfaceModem *self; + SyncingContext *ctx; + g_autoptr (GError) error = NULL; + + self = g_task_get_source_object (task); + ctx = g_task_get_task_data (task); + + if (!mm_bearer_list_sync_all_bearers_finish (bearer_list, res, &error)) + mm_obj_warn (self, "synchronizing all bearer status failed: %s", error->message); + + /* Go on to next step */ + ctx->step++; + interface_syncing_step (task); +} + +static void +reload_bearers (GTask *task) +{ + MMIfaceModem *self; + SyncingContext *ctx; + g_autoptr(MMBearerList) bearer_list = NULL; + + self = g_task_get_source_object (task); + ctx = g_task_get_task_data (task); g_object_get (self, - MM_IFACE_MODEM_BEARER_LIST, &list, + MM_IFACE_MODEM_BEARER_LIST, &bearer_list, NULL); - if (list) { - mm_bearer_list_foreach (list, - (MMBearerListForeachFunc)mm_base_bearer_sync, - NULL); + if (!bearer_list) { + /* Go on to next step */ + ctx->step++; + interface_syncing_step (task); + return; } + + mm_bearer_list_sync_all_bearers (bearer_list, + (GAsyncReadyCallback)sync_all_bearers_ready, + task); } static void @@ -4337,9 +4367,8 @@ interface_syncing_step (GTask *task) /* * Refresh bearers. */ - reload_bearers (self); - ctx->step++; - /* fall through */ + reload_bearers (task); + return; case SYNCING_STEP_LAST: /* We are done without errors! */ |