[PATCH] iface-modem-3gpp: port mm_iface_modem_3gpp_register_in_network to use GTask
Ben Chan
benchan at chromium.org
Fri Jun 30 09:21:18 UTC 2017
---
src/mm-iface-modem-3gpp.c | 93 +++++++++++++++++++++++++----------------------
1 file changed, 49 insertions(+), 44 deletions(-)
diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c
index 255e75f4..e1a61ced 100644
--- a/src/mm-iface-modem-3gpp.c
+++ b/src/mm-iface-modem-3gpp.c
@@ -199,7 +199,6 @@ get_consolidated_reg_state (RegistrationStateContext *ctx)
typedef struct {
MMIfaceModem3gpp *self;
MmGdbusModem3gpp *skeleton;
- GSimpleAsyncResult *result;
GCancellable *cancellable;
gchar *operator_id;
GTimer *timer;
@@ -207,11 +206,8 @@ typedef struct {
} RegisterInNetworkContext;
static void
-register_in_network_context_complete_and_free (RegisterInNetworkContext *ctx)
+register_in_network_context_free (RegisterInNetworkContext *ctx)
{
- g_simple_async_result_complete_in_idle (ctx->result);
- g_object_unref (ctx->result);
-
if (ctx->timer)
g_timer_destroy (ctx->timer);
@@ -234,16 +230,21 @@ register_in_network_context_complete_and_free (RegisterInNetworkContext *ctx)
}
static void
-register_in_network_context_failed (RegisterInNetworkContext *ctx,
- GError *error)
+register_in_network_context_complete_failed (GTask *task,
+ GError *error)
{
+ RegisterInNetworkContext *ctx;
+
+ ctx = g_task_get_task_data (task);
+
mm_iface_modem_3gpp_update_cs_registration_state (ctx->self, MM_MODEM_3GPP_REGISTRATION_STATE_IDLE);
mm_iface_modem_3gpp_update_ps_registration_state (ctx->self, MM_MODEM_3GPP_REGISTRATION_STATE_IDLE);
mm_iface_modem_3gpp_update_eps_registration_state (ctx->self, MM_MODEM_3GPP_REGISTRATION_STATE_IDLE);
mm_iface_modem_3gpp_update_access_technologies (ctx->self, MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
mm_iface_modem_3gpp_update_location (ctx->self, 0, 0);
- g_simple_async_result_take_error (ctx->result, error);
+ g_task_return_error (task, error);
+ g_object_unref (task);
}
gboolean
@@ -251,38 +252,44 @@ mm_iface_modem_3gpp_register_in_network_finish (MMIfaceModem3gpp *self,
GAsyncResult *res,
GError **error)
{
- return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
+ return g_task_propagate_boolean (G_TASK (res), error);
}
static void run_registration_checks_ready (MMIfaceModem3gpp *self,
GAsyncResult *res,
- RegisterInNetworkContext *ctx);
+ GTask *task);
static gboolean
-run_registration_checks_again (RegisterInNetworkContext *ctx)
+run_registration_checks_again (GTask *task)
{
+ RegisterInNetworkContext *ctx;
+
+ ctx = g_task_get_task_data (task);
+
/* Get fresh registration state */
mm_iface_modem_3gpp_run_registration_checks (
ctx->self,
(GAsyncReadyCallback)run_registration_checks_ready,
- ctx);
+ task);
return G_SOURCE_REMOVE;
}
static void
run_registration_checks_ready (MMIfaceModem3gpp *self,
GAsyncResult *res,
- RegisterInNetworkContext *ctx)
+ GTask *task)
{
+ RegisterInNetworkContext *ctx;
GError *error = NULL;
RegistrationStateContext *registration_state_context;
MMModem3gppRegistrationState current_registration_state;
+ ctx = g_task_get_task_data (task);
+
mm_iface_modem_3gpp_run_registration_checks_finish (MM_IFACE_MODEM_3GPP (self), res, &error);
if (error) {
mm_dbg ("3GPP registration check failed: '%s'", error->message);
- register_in_network_context_failed (ctx, error);
- register_in_network_context_complete_and_free (ctx);
+ register_in_network_context_complete_failed (task, error);
return;
}
@@ -293,10 +300,9 @@ run_registration_checks_ready (MMIfaceModem3gpp *self,
* finished */
if (current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_DENIED) {
mm_dbg ("Registration denied");
- register_in_network_context_failed (
- ctx,
+ register_in_network_context_complete_failed (
+ task,
mm_mobile_equipment_error_for_code (MM_MOBILE_EQUIPMENT_ERROR_NETWORK_NOT_ALLOWED));
- register_in_network_context_complete_and_free (ctx);
return;
}
@@ -313,18 +319,17 @@ run_registration_checks_ready (MMIfaceModem3gpp *self,
* the modem never got un-registered during the sequence. */
mm_iface_modem_refresh_signal (MM_IFACE_MODEM (ctx->self));
mm_dbg ("Modem is currently registered in a 3GPP network");
- g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
- register_in_network_context_complete_and_free (ctx);
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
return;
}
/* Don't spend too much time waiting to get registered */
if (g_timer_elapsed (ctx->timer, NULL) > ctx->max_registration_time) {
mm_dbg ("3GPP registration check timed out");
- register_in_network_context_failed (
- ctx,
+ register_in_network_context_complete_failed (
+ task,
mm_mobile_equipment_error_for_code (MM_MOBILE_EQUIPMENT_ERROR_NETWORK_TIMEOUT));
- register_in_network_context_complete_and_free (ctx);
return;
}
@@ -335,20 +340,19 @@ run_registration_checks_ready (MMIfaceModem3gpp *self,
* well.
*/
mm_dbg ("Modem not yet registered in a 3GPP network... will recheck soon");
- g_timeout_add_seconds (3, (GSourceFunc)run_registration_checks_again, ctx);
+ g_timeout_add_seconds (3, (GSourceFunc)run_registration_checks_again, task);
}
static void
register_in_network_ready (MMIfaceModem3gpp *self,
GAsyncResult *res,
- RegisterInNetworkContext *ctx)
+ GTask *task)
{
GError *error = NULL;
if (!MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->register_in_network_finish (self, res, &error)) {
/* Propagate error when trying to lock to network */
- register_in_network_context_failed (ctx, error);
- register_in_network_context_complete_and_free (ctx);
+ register_in_network_context_complete_failed (task, error);
return;
}
@@ -357,7 +361,7 @@ register_in_network_ready (MMIfaceModem3gpp *self,
mm_iface_modem_3gpp_run_registration_checks (
self,
(GAsyncReadyCallback)run_registration_checks_ready,
- ctx);
+ task);
}
void
@@ -371,32 +375,33 @@ mm_iface_modem_3gpp_register_in_network (MMIfaceModem3gpp *self,
const gchar *current_operator_code;
RegistrationStateContext *registration_state_context;
GError *error = NULL;
+ GTask *task;
ctx = g_slice_new0 (RegisterInNetworkContext);
ctx->self = g_object_ref (self);
- ctx->result = g_simple_async_result_new (G_OBJECT (self),
- callback,
- user_data,
- mm_iface_modem_3gpp_register_in_network);
ctx->operator_id = (operator_id && operator_id[0]) ? g_strdup (operator_id) : NULL;
ctx->max_registration_time = max_registration_time;
+
+ task = g_task_new (self, NULL, callback, user_data);
+ g_task_set_task_data (task, ctx, (GDestroyNotify)register_in_network_context_free);
+
g_object_get (self,
MM_IFACE_MODEM_3GPP_DBUS_SKELETON, &ctx->skeleton,
NULL);
if (!ctx->skeleton) {
- g_simple_async_result_set_error (ctx->result,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Couldn't get interface skeleton");
- register_in_network_context_complete_and_free (ctx);
+ g_task_return_new_error (task,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Couldn't get interface skeleton");
+ g_object_unref (task);
return;
}
/* Validate input MCC/MNC */
if (ctx->operator_id && !mm_3gpp_parse_operator_id (ctx->operator_id, NULL, NULL, &error)) {
g_assert (error != NULL);
- g_simple_async_result_take_error (ctx->result, error);
- register_in_network_context_complete_and_free (ctx);
+ g_task_return_error (task, error);
+ g_object_unref (task);
return;
}
@@ -419,8 +424,8 @@ mm_iface_modem_3gpp_register_in_network (MMIfaceModem3gpp *self,
registration_state_context->manual_registration = TRUE;
mm_dbg ("Already registered in selected network '%s'...",
current_operator_code);
- g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
- register_in_network_context_complete_and_free (ctx);
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
return;
}
@@ -438,8 +443,8 @@ mm_iface_modem_3gpp_register_in_network (MMIfaceModem3gpp *self,
mm_dbg ("Already registered in network '%s',"
" automatic registration not launched...",
current_operator_code);
- g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
- register_in_network_context_complete_and_free (ctx);
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
return;
}
@@ -461,7 +466,7 @@ mm_iface_modem_3gpp_register_in_network (MMIfaceModem3gpp *self,
ctx->operator_id,
ctx->cancellable,
(GAsyncReadyCallback)register_in_network_ready,
- ctx);
+ task);
}
typedef struct {
--
2.13.2
More information about the ModemManager-devel
mailing list