aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2017-09-04 17:15:04 +0200
committerAleksander Morgado <aleksander@aleksander.es>2017-09-04 17:59:59 +0200
commitbe079381c06427f4748be245dc7c89fefed35293 (patch)
tree7123a6be4e6f1b069740209df0f7c18ada7976ac
parent76916de31350b915c7cdd7d89fee08f03a97800f (diff)
telit: avoid leaking SIM object
We were getting the SIM object for all paths, but only using (and disposing it) in the AFTER_POWER_UP_STEP_GET_SIM_IDENTIFIER step. Update the logic to only retrieve, use and dispose the SIM object in the step that is needed, and therefore avoid leaking it in the remaining steps.
-rw-r--r--plugins/telit/mm-broadband-modem-telit.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/plugins/telit/mm-broadband-modem-telit.c b/plugins/telit/mm-broadband-modem-telit.c
index 782b5fbf..d517f549 100644
--- a/plugins/telit/mm-broadband-modem-telit.c
+++ b/plugins/telit/mm-broadband-modem-telit.c
@@ -985,32 +985,36 @@ after_power_up_step (GTask *task)
{
AfterPowerUpContext *ctx;
MMBroadbandModemTelit *self;
- MMBaseSim *sim = NULL;
ctx = g_task_get_task_data (task);
self = g_task_get_source_object (task);
- g_object_get (MM_BROADBAND_MODEM_TELIT (self),
- MM_IFACE_MODEM_SIM, &sim,
- NULL);
- if (!sim) {
- g_task_return_new_error (task,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "could not acquire sim object");
- return;
- }
-
switch (ctx->step) {
case AFTER_POWER_UP_STEP_FIRST:
/* Fall back on next step */
ctx->step++;
- case AFTER_POWER_UP_STEP_GET_SIM_IDENTIFIER:
+
+ case AFTER_POWER_UP_STEP_GET_SIM_IDENTIFIER: {
+ MMBaseSim *sim = NULL;
+
+ g_object_get (MM_BROADBAND_MODEM_TELIT (self),
+ MM_IFACE_MODEM_SIM, &sim,
+ NULL);
+ if (!sim) {
+ g_task_return_new_error (task,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "could not acquire sim object");
+ return;
+ }
+
mm_base_sim_load_sim_identifier (sim,
(GAsyncReadyCallback)load_sim_identifier_ready,
task);
g_object_unref (sim);
return;
+ }
+
case AFTER_POWER_UP_STEP_ENABLE_QSS_PARSING:
mm_dbg ("Stop ignoring #QSS");
self->priv->parse_qss = TRUE;