atmodem: gprs context deactivate crashes ofonod
Hello again,
I have been testing ofono with my Huawei E1552 usb stick, which is using atmodem and PPP. I noticed that whenever I call test/deactivate-context ofono either crashes or busyloops here in at_gprs_deactivate_primary():
if (g_at_chat_send(gcd->chat, buf, none_prefix, at_cgact_down_cb, cbd, g_free) > 0) return;
Further investigation revealed that gcd->chat is already unreferenced in setup_ppp():
g_at_chat_unref(gcd->chat);
So there's a conflict here. How to handle this properly? Calling g_at_ppp_shutdown() is most likely not enough, because nobody is not creating gcd->chat again which is needed during subsequent activate call.
Comments?
Signature · 1 line
Kalle Valo
Hi Kalle,
Quoted 13 lines
Hello again,
I have been testing ofono with my Huawei E1552 usb stick, which is using atmodem and PPP. I noticed that whenever I call test/deactivate-context ofono either crashes or busyloops here in
at_gprs_deactivate_primary():if (g_at_chat_send(gcd->chat, buf, none_prefix, at_cgact_down_cb, cbd, g_free) > 0) return;Further investigation revealed that
gcd->chatis already unreferenced insetup_ppp():
Quoted 9 lines
g_at_chat_unref(gcd->chat);So there's a conflict here. How to handle this properly? Calling
g_at_ppp_shutdown()is most likely not enough, because nobody is not creatinggcd->chatagain which is needed during subsequent activate call.Comments?
Deactivation of the context was never made to work properly. For a hint, please have a look at gatchat/gsmdial.c. When PPP is established we should be using g_at_chat_suspend. During a context deactivation we should use g_at_ppp_shutdown and then reactivate the gatchat using g_at_chat_resume (assuming the Huawei does not HUP the tty when disconnecting the ppp link.)
Regards,
-Denis
Quoted 1 line · Denis Kenzior
Hi Kalle,
Hi Denis,
Quoted 18 lines
Quoted 18 lines
I have been testing ofono with my Huawei E1552 usb stick, which is using atmodem and PPP. I noticed that whenever I call test/deactivate-context ofono either crashes or busyloops here in
at_gprs_deactivate_primary():if (g_at_chat_send(gcd->chat, buf, none_prefix, at_cgact_down_cb, cbd, g_free) > 0) return;Further investigation revealed that
gcd->chatis already unreferenced insetup_ppp():g_at_chat_unref(gcd->chat);So there's a conflict here. How to handle this properly? Calling
g_at_ppp_shutdown()is most likely not enough, because nobody is not creatinggcd->chatagain which is needed during subsequent activate call.
Quoted 8 lines
Quoted 2 lines
Comments?
Deactivation of the context was never made to work properly. For a hint, please have a look at
gatchat/gsmdial.c. When PPP is established we should be usingg_at_chat_suspend. During a context deactivation we should useg_at_ppp_shutdownand then reactivate the gatchat usingg_at_chat_resume
Ok, thank you for the tips. I'll take a look at this later, I have to fix some other issues first.
Quoted 2 lines
(assuming the Huawei does not HUP the tty when disconnecting the ppp link.)
Let's hope not.
Signature · 1 line
Kalle Valo