diff options
Diffstat (limited to 'src/mm-modem-base.c')
-rw-r--r-- | src/mm-modem-base.c | 26 |
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 |