diff options
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 14 | ||||
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 13 |
2 files changed, 26 insertions, 1 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index 81baf043..6ff008e8 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -5319,11 +5319,14 @@ mm_broadband_modem_mbim_init (MMBroadbandModemMbim *self) } static void -finalize (GObject *object) +dispose (GObject *object) { MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (object); MMPortMbim *mbim; + /* If any port cleanup is needed, it must be done during dispose(), as + * the modem object will be affected by an explciit g_object_run_dispose() + * that will remove all port references right away */ mbim = mm_base_modem_peek_port_mbim (MM_BASE_MODEM (self)); if (mbim) { /* Explicitly remove notification handler */ @@ -5336,6 +5339,14 @@ finalize (GObject *object) mm_port_mbim_close (mbim, NULL, NULL); } + G_OBJECT_CLASS (mm_broadband_modem_mbim_parent_class)->dispose (object); +} + +static void +finalize (GObject *object) +{ + MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (object); + g_free (self->priv->caps_device_id); g_free (self->priv->caps_firmware_info); g_free (self->priv->caps_hardware_info); @@ -5600,6 +5611,7 @@ mm_broadband_modem_mbim_class_init (MMBroadbandModemMbimClass *klass) g_type_class_add_private (object_class, sizeof (MMBroadbandModemMbimPrivate)); + object_class->dispose = dispose; object_class->finalize = finalize; broadband_modem_class->initialization_started = initialization_started; diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 5f89efba..abb0ce87 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -8650,6 +8650,19 @@ static void dispose (GObject *object) { MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (object); + MMPortQmi *qmi; + + /* If any port cleanup is needed, it must be done during dispose(), as + * the modem object will be affected by an explciit g_object_run_dispose() + * that will remove all port references right away */ + qmi = mm_base_modem_peek_port_qmi (MM_BASE_MODEM (self)); + if (qmi) { + /* Disconnect signal handler for qmi-proxy disappearing, if it exists */ + untrack_qmi_device_removed (self, qmi); + /* If we did open the QMI port during initialization, close it now */ + if (mm_port_qmi_is_open (qmi)) + mm_port_qmi_close (qmi); + } g_list_free_full (self->priv->firmware_list, g_object_unref); self->priv->firmware_list = NULL; |