From 9ddcf92a18f94e4d4e38c2807311ad8518b5e9a7 Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Thu, 12 Jul 2012 14:12:52 -0700 Subject: iface-modem: fix crashes due to removed skeleton expire_signal_quality() / mm_iface_modem_update_access_technologies() may be called after the DBus object skeleton is removed in mm_iface_modem_shutdown() and before their associated timeout source is removed (in *_context_free) due to destruction of the modem object. This patch fixes the issue by removing context objects before removing the DBus skeleton in mm_iface_modem_shutdown(). --- src/mm-iface-modem.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/mm-iface-modem.c') diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 49a18a59..3373b5ba 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -3676,6 +3676,31 @@ mm_iface_modem_shutdown (MMIfaceModem *self) { g_return_if_fail (MM_IS_IFACE_MODEM (self)); + /* Remove SignalQualityCheckContext object to make sure any pending + * invocation of periodic_signal_quality_check is cancelled before + * SignalQualityUpdateContext is removed (as signal_quality_check_ready may + * call update_signal_quality). */ + if (G_LIKELY (signal_quality_check_context_quark)) + g_object_set_qdata (G_OBJECT (self), + signal_quality_check_context_quark, + NULL); + + /* Remove SignalQualityUpdateContext object to make sure any pending + * invocation of expire_signal_quality is canceled before the DBus skeleton + * is removed. */ + if (G_LIKELY (signal_quality_update_context_quark)) + g_object_set_qdata (G_OBJECT (self), + signal_quality_update_context_quark, + NULL); + + /* Remove AccessTechnologiesCheckContext object to make sure any pending + * invocation of periodic_access_technologies_check is canceled before the + * DBus skeleton is removed. */ + if (G_LIKELY (access_technologies_check_context_quark)) + g_object_set_qdata (G_OBJECT (self), + access_technologies_check_context_quark, + NULL); + /* Remove SIM object */ g_object_set (self, MM_IFACE_MODEM_SIM, NULL, -- cgit v1.2.3-70-g09d2