aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-manager.c6
-rw-r--r--src/mm-modem-base.c26
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