diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2017-10-20 17:47:54 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2017-10-20 17:56:36 +0200 |
commit | adcce66dd7b676e4cc7bf71b63588e746f51dc14 (patch) | |
tree | 6cdd46aaa2cf7b8e2463e6d5fd6d5b24e2a569bf /src | |
parent | dbb4597e335d66dda7abebbab7d70b0708146350 (diff) |
broadband-modem-qmi: avoid NULL success return in firmware_load_current
Instead of assuming that NULL is a valid return, make sure we return
an error instead.
This also makes it sure that if the GTask gets cancelled, the result
we set is always a valid GObject, so that the g_object_unref passed as
GDestroyNotify can be safely called always. Not a big deal anyway, as
the GTask cannot be currently cancelled.
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 11 | ||||
-rw-r--r-- | src/mm-iface-modem-firmware.c | 14 |
2 files changed, 16 insertions, 9 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index e3b37bd5..21ab8698 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -10383,10 +10383,13 @@ firmware_load_current (MMIfaceModemFirmware *_self, GTask *task; task = g_task_new (self, NULL, callback, user_data); - g_task_return_pointer ( - task, - self->priv->current_firmware ? g_object_ref (self->priv->current_firmware) : NULL, - g_object_unref); + if (self->priv->current_firmware) + g_task_return_pointer (task, + g_object_ref (self->priv->current_firmware), + g_object_unref); + else + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_NOT_FOUND, + "current firmware unknown"); g_object_unref (task); } diff --git a/src/mm-iface-modem-firmware.c b/src/mm-iface-modem-firmware.c index da106b00..0646f376 100644 --- a/src/mm-iface-modem-firmware.c +++ b/src/mm-iface-modem-firmware.c @@ -68,12 +68,16 @@ load_current_ready (MMIfaceModemFirmware *self, GList *l; GError *error = NULL; - /* reported current may be NULL and we don't treat it as error */ ctx->current = MM_IFACE_MODEM_FIRMWARE_GET_INTERFACE (self)->load_current_finish (self, res, &error); - if (error) { - g_dbus_method_invocation_take_error (ctx->invocation, error); - handle_list_context_free (ctx); - return; + if (!ctx->current) { + /* Not found isn't fatal */ + if (!g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_NOT_FOUND)) { + g_dbus_method_invocation_take_error (ctx->invocation, error); + handle_list_context_free (ctx); + return; + } + mm_dbg ("Couldn't load current firmware image: %s", error->message); + g_clear_error (&error); } /* Build array of dicts */ |