Hi Denis, On 17/02/2011 17:50, Denis Kenzior wrote: > Hi Guillaume, > > On 02/17/2011 10:37 AM, Guillaume Zajac wrote: >> Hi Denis, >> >> On 17/02/2011 17:14, Denis Kenzior wrote: >>> Hi Guillaume, >>> >>> On 02/17/2011 07:48 AM, Guillaume Zajac wrote: >>>> --- >>>> gatchat/test-server.c | 6 ++++++ >>>> 1 files changed, 6 insertions(+), 0 deletions(-) >>>> >>>> diff --git a/gatchat/test-server.c b/gatchat/test-server.c >>>> index e574d64..c0a5a4d 100644 >>>> --- a/gatchat/test-server.c >>>> +++ b/gatchat/test-server.c >>>> @@ -137,6 +137,12 @@ static void >>>> ppp_disconnect(GAtPPPDisconnectReason reason, gpointer user) >>>> g_at_ppp_unref(ppp); >>>> ppp = NULL; >>>> >>>> + if (reason == G_AT_PPP_REASON_NET_FAIL) { >>> Don't you mean G_AT_PPP_REASON_LINK_DEAD? >>> >> In case of test-server, I didn't reproduce the crash with/without the >> fix, I applied it to test server first as we don't have dial_cb for >> emulator yet: >> >> I did ./gsmdial -i localhost -p 12346 >> >> At the end of the exchange: >> ppp_lcp_down_notify() is called >> disconnect reason is G_AT_PPP_REASON_PEER_CLOSED >> then the GAtServer is well resumed. >> > That is because gsmdial performs graceful shutdown, try killing the app > with -9. > Right, I just tested it and the fix with: if (reason == G_AT_PPP_REASON_LINK_DEAD) { g_at_server_unref(server); server = NULL; return; } is avoiding the crash in case the telnet is killed after we do a ATD*99. I will submit a new patch for fixing this crash. >> In case of emulator (based on Gustavo/ZhenZhua dial_cb), >> ppp_lcp_down_notify() is called but just after this one, >> ppp_ipcp_up_notify() fails and sets disconnect reason to >> G_AT_PPP_REASON_NET_FAIL. > Then we probably have a bug. Yes, I will try to investigate a bit more on this issue and the action to do. >> Then we get a crash after ppp_disconnect because we call the hdlc write >> handler e.g. can_write_data() into gathldc.c although we have unref the >> PPP server. >> >> So I called ofono_emulator_remove() that will call the unref GAtServer >> etc... when we get G_AT_PPP_REASON_NET_FAIL into ppp_disconnect >> >> I don't get G_AT_PPP_REASON_LINK_DEAD disconnect reason when emulator >> crashes. >> >> So should we call ofono_emulator_remove()/GAtServer_unref() in both >> disconnect reason cases? >> Or is there a specific action to do when G_AT_PPP_REASON_NET_FAIL? >> > Not necessarily, NET_FAIL basically means the IPCP negotiation failed. > It is not fatal. Ok. > Regards, > -Denis > Kind regards, Guillaume