Re: [MM] [PATCH v3] iface-modem: fix crashes due to removed skeleton



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]