diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-01-21 18:24:26 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:14:55 +0100 |
commit | 050c30db1c5ac9ed5003b73fd4cbf0fe56f3008f (patch) | |
tree | bef9faa7e38de7309461aae494ddb69ced32f829 /src | |
parent | 77999f3bcec7753bdcc5a51da4c271c78157f051 (diff) |
iface-modem-simple: don't create a bearer if we can reuse an existing one
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-iface-modem-simple.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/mm-iface-modem-simple.c b/src/mm-iface-modem-simple.c index 1143bd6a..f0365d6e 100644 --- a/src/mm-iface-modem-simple.c +++ b/src/mm-iface-modem-simple.c @@ -501,25 +501,35 @@ connection_step (ConnectionContext *ctx) MM_IFACE_MODEM_BEARER_LIST, &list, NULL); - /* TODO: check if the bearer we want to create is already in the list */ - - /* If we don't have enough space to create the, try to remove - * all existing ones first BUT only if that will give us enough space. */ - if (mm_bearer_list_get_max (list) == mm_bearer_list_get_count (list)) { - /* We'll remove all existing bearers, and then go on creating the new one */ - mm_bearer_list_delete_all_bearers (list); - } - bearer_properties = (mm_common_connect_properties_get_bearer_properties ( ctx->properties)); - mm_iface_modem_create_bearer (MM_IFACE_MODEM (ctx->self), - bearer_properties, - (GAsyncReadyCallback)create_bearer_ready, - ctx); + /* Check if the bearer we want to create is already in the list */ + ctx->bearer = mm_bearer_list_find (list, bearer_properties); + if (!ctx->bearer) { + mm_dbg ("Creating new bearer..."); + /* If we don't have enough space to create the bearer, try to remove + * all existing ones first. */ + if (mm_bearer_list_get_max (list) == mm_bearer_list_get_count (list)) + /* We'll remove all existing bearers, and then go on creating the new one */ + mm_bearer_list_delete_all_bearers (list); + + mm_iface_modem_create_bearer (MM_IFACE_MODEM (ctx->self), + bearer_properties, + (GAsyncReadyCallback)create_bearer_ready, + ctx); + + g_object_unref (list); + g_object_unref (bearer_properties); + return; + } + + mm_dbg ("Using already existing bearer at '%s'...", + mm_bearer_get_path (ctx->bearer)); g_object_unref (list); g_object_unref (bearer_properties); - return; + /* Fall down to next step */ + ctx->step++; } case CONNECTION_STEP_CONNECT: |