aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Chan <benchan@chromium.org>2014-01-06 09:50:05 -0800
committerDan Williams <dcbw@redhat.com>2014-01-06 18:23:58 -0600
commit22b0de736b73d076eebd8978a8d0b9da1f3d126d (patch)
tree0fb11be095e452285ca2a20ba081a90d539bf314
parent2a946bd72cbc1f1a09db2d72e46e0e1f2a95107f (diff)
huawei: handle ^NDISSTAT disconnected notification only on a connected bearer
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. 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
-rw-r--r--plugins/huawei/mm-broadband-bearer-huawei.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/plugins/huawei/mm-broadband-bearer-huawei.c b/plugins/huawei/mm-broadband-bearer-huawei.c
index 1b9c0ffb..b39839f8 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 (