Fix busylooped in ppp_disconnect for huawei modem

Huawei modem closes the modem port after PPP disconnect. So the channel
of gatchat is NULL in ppp_disconnect. In such case, we resume the chat
and it causes huawei_disconnect() get called and the gprs context is
removed later.

Before removing this gprs context, we should reply the pending DBus
message to the client.
This commit is contained in:
Zhenhua Zhang 2010-07-28 08:25:26 +08:00 committed by Denis Kenzior
parent b952c34c38
commit 26efde3d7b
1 changed files with 7 additions and 2 deletions

View File

@ -93,7 +93,6 @@ static void ppp_disconnect(GAtPPPDisconnectReason reason, gpointer user_data)
g_at_ppp_unref(gcd->ppp);
gcd->ppp = NULL;
g_at_chat_resume(gcd->chat);
switch (gcd->state) {
case STATE_ENABLING:
@ -110,6 +109,12 @@ static void ppp_disconnect(GAtPPPDisconnectReason reason, gpointer user_data)
gcd->active_context = 0;
gcd->state = STATE_IDLE;
/*
* If the channel of gcd->chat is NULL, it might cause
* gprs_context_remove get called and the gprs context will be
* removed.
*/
g_at_chat_resume(gcd->chat);
}
static gboolean setup_ppp(struct ofono_gprs_context *gc)
@ -257,7 +262,7 @@ static void at_gprs_context_remove(struct ofono_gprs_context *gc)
DBG("");
if (gcd->state != STATE_IDLE) {
if (gcd->state != STATE_IDLE && gcd->ppp) {
g_at_ppp_unref(gcd->ppp);
g_at_chat_resume(gcd->chat);
}