aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-base.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-modem-base.c')
-rw-r--r--src/mm-modem-base.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/mm-modem-base.c b/src/mm-modem-base.c
index f303627f..099832ba 100644
--- a/src/mm-modem-base.c
+++ b/src/mm-modem-base.c
@@ -163,10 +163,34 @@ mm_modem_base_add_port (MMModemBase *self,
gboolean
mm_modem_base_remove_port (MMModemBase *self, MMPort *port)
{
+ MMModemBasePrivate *priv;
+ char *device, *key, *dupname;
+ const char *type_name, *name;
+ MMPortSubsys subsys;
+ gboolean removed;
+
g_return_val_if_fail (MM_IS_MODEM_BASE (self), FALSE);
g_return_val_if_fail (port != NULL, FALSE);
- return g_hash_table_remove (MM_MODEM_BASE_GET_PRIVATE (self)->ports, port);
+ priv = MM_MODEM_BASE_GET_PRIVATE (self);
+
+ name = mm_port_get_device (port);
+ dupname = g_strdup (name);
+ subsys = mm_port_get_subsys (port);
+ type_name = mm_port_type_to_name (mm_port_get_port_type (port));
+
+ key = get_hash_key (mm_port_subsys_to_name (subsys), name);
+ removed = g_hash_table_remove (priv->ports, key);
+ if (removed) {
+ /* Port may have already been destroyed by removal from the hash */
+ device = mm_modem_get_device (MM_MODEM (self));
+ mm_dbg ("(%s) type %s removed from %s", dupname, type_name, device);
+ g_free (device);
+ }
+ g_free (key);
+ g_free (dupname);
+
+ return removed;
}
void