diff options
author | Pavan Holla <pholla@chromium.org> | 2020-09-30 20:29:36 +0000 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-10-03 13:14:21 +0000 |
commit | 74ab15d3239b62c53a0eecfac5a0488b6731bb71 (patch) | |
tree | 5affa76ed349008cd8062c42435d02d5c6dfe132 | |
parent | aa4dce2afc804d6ba4670392919dd12dbc62a162 (diff) |
broadband-modem-qmi: Return error if get_pin_status fails
Prior to this CL, failure to get pin status while probing facility locks
would not flag an error. Failure to read a pin lock is a critical error
and we return it to higher layers.
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index f0e75f20..aafe2949 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -1998,41 +1998,44 @@ get_sim_lock_status_via_pin_status_ready (QmiClientDms *client, MMBroadbandModemQmi *self; LoadEnabledFacilityLocksContext *ctx; QmiMessageDmsUimGetPinStatusOutput *output; - gboolean enabled; + QmiDmsUimPinStatus current_status; + GError *error; + gboolean pin1_enabled; self = g_task_get_source_object (task); ctx = g_task_get_task_data (task); - output = qmi_client_dms_uim_get_pin_status_finish (client, res, NULL); + output = qmi_client_dms_uim_get_pin_status_finish (client, res, &error); if (!output || - !qmi_message_dms_uim_get_pin_status_output_get_result (output, NULL)) { - mm_obj_dbg (self, "couldn't query PIN status, assuming SIM PIN is disabled"); - enabled = FALSE; - } else { - QmiDmsUimPinStatus current_status; - - if (qmi_message_dms_uim_get_pin_status_output_get_pin1_status ( - output, - ¤t_status, - NULL, /* verify_retries_left */ - NULL, /* unblock_retries_left */ - NULL)) { - enabled = mm_pin_enabled_from_qmi_uim_pin_status (current_status); - mm_obj_dbg (self, "PIN is reported %s", (enabled ? "enabled" : "disabled")); - } else { - mm_obj_dbg (self, "couldn't find PIN1 status in the result, assuming SIM PIN is disabled"); - enabled = FALSE; - } + !qmi_message_dms_uim_get_pin_status_output_get_result (output, &error)) { + g_task_return_error (task, error); + g_object_unref (task); + if (output) + qmi_message_dms_uim_get_pin_status_output_unref (output); + return; } - if (output) + if (qmi_message_dms_uim_get_pin_status_output_get_pin1_status ( + output, + ¤t_status, + NULL, /* verify_retries_left */ + NULL, /* unblock_retries_left */ + &error)) { + pin1_enabled = mm_pin_enabled_from_qmi_uim_pin_status (current_status); + mm_obj_dbg (self, "PIN1 is reported %s", (pin1_enabled ? "enabled" : "disabled")); + } else { qmi_message_dms_uim_get_pin_status_output_unref (output); + g_task_return_error (task, error); + g_object_unref (task); + return; + } + + qmi_message_dms_uim_get_pin_status_output_unref (output); - if (enabled) { + if (pin1_enabled) ctx->locks |= (MM_MODEM_3GPP_FACILITY_SIM); - } else { + else ctx->locks &= ~(MM_MODEM_3GPP_FACILITY_SIM); - } /* No more facilities to query, all done */ g_task_return_int (task, ctx->locks); |