diff options
-rw-r--r-- | src/mm-base-modem.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c index 64361654..85276876 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -339,6 +339,12 @@ base_modem_internal_grab_port (MMBaseModem *self, subsys = mm_kernel_device_get_subsystem (kernel_device); name = mm_kernel_device_get_name (kernel_device); + if (!self->priv->ports || (link_port && !self->priv->link_ports)) { + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Cannot add port '%s/%s', no ports table", subsys, name); + return NULL; + } + /* Check whether we already have it stored */ key = g_strdup_printf ("%s%s", subsys, name); port = g_hash_table_lookup (self->priv->ports, key); @@ -521,6 +527,12 @@ mm_base_modem_release_link_port (MMBaseModem *self, g_autofree gchar *key = NULL; MMPort *port; + if (!self->priv->link_ports) { + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Cannot release link port '%s/%s', no link ports table", subsystem, name); + return FALSE; + } + key = g_strdup_printf ("%s%s", subsystem, name); port = g_hash_table_lookup (self->priv->link_ports, key); if (!port) { @@ -641,6 +653,13 @@ mm_base_modem_wait_link_port (MMBaseModem *self, return; } + if (!self->priv->link_ports) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Cannot wait for port '%s/%s', no link ports table", subsystem, name); + g_object_unref (task); + return; + } + key = g_strdup_printf ("%s%s", subsystem, name); port = g_hash_table_lookup (self->priv->link_ports, key); if (port) { @@ -1116,6 +1135,9 @@ mm_base_modem_has_at_port (MMBaseModem *self) gpointer value; gpointer key; + if (!self->priv->ports) + return FALSE; + /* We'll iterate the ht of ports, looking for any port which is AT */ g_hash_table_iter_init (&iter, self->priv->ports); while (g_hash_table_iter_next (&iter, &key, &value)) { @@ -1142,6 +1164,11 @@ mm_base_modem_get_port_infos (MMBaseModem *self, GArray *port_infos; MMPort *port; + if (!self->priv->ports) { + *n_port_infos = 0; + return NULL; + } + *n_port_infos = g_hash_table_size (self->priv->ports); port_infos = g_array_sized_new (FALSE, FALSE, sizeof (MMModemPortInfo), *n_port_infos); g_hash_table_iter_init (&iter, self->priv->ports); @@ -1339,6 +1366,14 @@ mm_base_modem_organize_ports (MMBaseModem *self, if (self->priv->primary) return TRUE; + /* Ports table is created on init and removed on dispose(), not on + * finalize(), so there is a chance this may happen */ + if (!self->priv->ports) { + g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "No ports table"); + return FALSE; + } + g_hash_table_iter_init (&iter, self->priv->ports); while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &candidate)) { switch (mm_port_get_port_type (candidate)) { |