[PATCH] huawei: handle ^NDISSTAT disconnected notification only on a connected bearer

Dan Williams dcbw at redhat.com
Mon Jan 6 16:24:29 PST 2014


On Mon, 2014-01-06 at 09:50 -0800, Ben Chan wrote:
> If the bearer is not actually connected and the modem (inappropriately)
> indicates a disconnected status via a ^NDISSTAT unsolicited message, it
> could potentially lead to the following assertion in
> connect_3gpp_context_step. This patch addresses such an issue.

Pushed.

Dan

>     g_assert (ctx->self->priv->network_disconnect_pending_id == 0);
> 
> 0x7f940c2ecd95   [libc-2.15.so]            - raise.c:64                         raise
> 0x7f940c2ee217   [libc-2.15.so]            - abort.c:91                         abort
> 0x7f940c8e6086   [libglib-2.0.so.0.3400.3] - gtestutils.c:1877                  g_assertion_message
> 0x7f940c8e6553   [libglib-2.0.so.0.3400.3] - gtestutils.c:1888                  g_assertion_message_expr
> 0x7f940cba5710   [libmm-plugin-huawei.so]  - mm-broadband-bearer-huawei.c:240   connect_3gpp_context_step
> 0x7f940cd4a51e   [ModemManager]            - mm-broadband-bearer.c:1246         connect
> 0x7f940cd662b7   [ModemManager]            - mm-iface-modem-simple.c:588        connection_step
> 0x7f940cd66e6e   [ModemManager]            - mm-iface-modem-simple.c:267        register_in_3gpp_or_cdma_network_ready
> 0x7f940ca0e296   [libgio-2.0.so.0.3400.3]  - gsimpleasyncresult.c:775           g_simple_async_result_complete
> 0x7f940ca0e398   [libgio-2.0.so.0.3400.3]  - gsimpleasyncresult.c:787           complete_in_idle_cb
> 0x7f940c8c2ff4   [libglib-2.0.so.0.3400.3] - gmain.c:2715                       g_main_context_dispatch
> 0x7f940c8c3377   [libglib-2.0.so.0.3400.3] - gmain.c:3290                       g_main_context_iterate
> 0x7f940c8c37c9   [libglib-2.0.so.0.3400.3] - gmain.c:3484                       g_main_loop_run
> 0x7f940cd3b425   [ModemManager]            - main.c:142                         main
> 0x7f940c2d9464   [libc-2.15.so]            - libc-start.c:234                   __libc_start_main
> 0x7f940cd3afa8   [ModemManager]            + 0x0001efa8
> ---
>  plugins/huawei/mm-broadband-bearer-huawei.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/plugins/huawei/mm-broadband-bearer-huawei.c b/plugins/huawei/mm-broadband-bearer-huawei.c
> index 1b9c0ff..b39839f 100644
> --- a/plugins/huawei/mm-broadband-bearer-huawei.c
> +++ b/plugins/huawei/mm-broadband-bearer-huawei.c
> @@ -696,7 +696,8 @@ report_connection_status (MMBearer *bearer,
>          /* MM_BEARER_CONNECTION_STATUS_DISCONNECTING is used to indicate that the
>           * reporting of disconnection should be delayed. See MMBroadbandModemHuawei's
>           * bearer_report_connection_status for details. */
> -        if (self->priv->network_disconnect_pending_id == 0) {
> +        if (mm_bearer_get_status (bearer) == MM_BEARER_STATUS_CONNECTED &&
> +            self->priv->network_disconnect_pending_id == 0) {
>              mm_dbg ("Delay network-initiated disconnection of bearer '%s'",
>                      mm_bearer_get_path (MM_BEARER (self)));
>              self->priv->network_disconnect_pending_id = (g_timeout_add_seconds (




More information about the ModemManager-devel mailing list