diff options
-rw-r--r-- | src/mm-manager.c | 6 | ||||
-rw-r--r-- | src/mm-modem-base.c | 26 |
2 files changed, 29 insertions, 3 deletions
diff --git a/src/mm-manager.c b/src/mm-manager.c index 67377807..561d427c 100644 --- a/src/mm-manager.c +++ b/src/mm-manager.c @@ -836,7 +836,7 @@ device_removed (MMManager *manager, GUdevDevice *device) MMManagerPrivate *priv = MM_MANAGER_GET_PRIVATE (manager); MMModem *modem; const char *subsys, *name; - char *key; + char *key, *modem_device; SupportsInfo *info; g_return_if_fail (device != NULL); @@ -851,6 +851,9 @@ device_removed (MMManager *manager, GUdevDevice *device) /* find_modem_for_port handles tty and net removal */ modem = find_modem_for_port (manager, subsys, name); if (modem) { + modem_device = mm_modem_get_device (modem); + mm_info ("(%s/%s): released by modem %s", subsys, name, modem_device); + g_free (modem_device); mm_modem_release_port (modem, subsys, name); return; } @@ -865,7 +868,6 @@ device_removed (MMManager *manager, GUdevDevice *device) */ const char *sysfs_path = g_udev_device_get_sysfs_path (device); - // mm_dbg ("Looking for a modem for removed device %s", sysfs_path); modem = find_modem_for_device (manager, sysfs_path); if (modem) { mm_dbg ("Removing modem claimed by removed device %s", sysfs_path); 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 |