Re: [MM] [PATCH v3] iface-modem: fix crashes due to removed skeleton
- From: Aleksander Morgado <aleksander lanedo com>
- To: Ben Chan <benchan chromium org>
- Cc: networkmanager-list gnome org
- Subject: Re: [MM] [PATCH v3] iface-modem: fix crashes due to removed skeleton
- Date: Fri, 13 Jul 2012 09:12:44 +0200
On 07/12/2012 11:12 PM, Ben Chan wrote:
> 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 files changed, 25 insertions(+), 0 deletions(-)
>
> diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
> index 49a18a5..3373b5b 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,
>
Pushed now, along with a similar fix for the registration check contexts
in the 3GPP and CDMA interfaces.
Thanks!
--
Aleksander
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]