[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Linphone-developers] Re: crash of linphone when closing call : problem
From: |
Simon Morlat |
Subject: |
[Linphone-developers] Re: crash of linphone when closing call : problem found |
Date: |
Fri, 11 Dec 2009 09:32:02 +0100 |
Hi,
THank you for the detailed analysis.
The problem is basically that eXosip refuses to send a CANCEL request
for a call for which it did not received a 1xx response yet.
Is this behaviour defined in the standart ? I don't know but I will dig.
However, do you have a backtrace when linphone crashes after that ?
Because normally it should be able to detect these "zombie" calls later
and close them.
Simon
Le dimanche 06 décembre 2009 à 21:06 +0100, Saverio Ieva a écrit :
> Hi Simon,
>
> I have looked at source code and I have found that the crash happen
> because there is a problem in
> int eXosip_call_terminate(int cid, int did) in eXcall_api.c in exosip
> package, I am using the latest svn release.
>
> I paste the code bugged:
>
> tr = eXosip_find_last_out_invite(jc, jd); // the code here is
> good because tr os not null
> if (jd != NULL && jd->d_dialog != NULL
> && jd->d_dialog->state == DIALOG_CONFIRMED) {
> /* don't send CANCEL on re-INVITE: send BYE instead */
> } else if (tr != NULL && tr->last_response != NULL /// HERE there
> is the problem.... tr->last_response is NULL because when I close the
> call I have not received any response from sip server (I close very
> soon the call)
> && MSG_IS_STATUS_1XX(tr->last_response)) {
> i = generating_cancel(&request, tr->orig_request);
> if (i != 0) {
> OSIP_TRACE(osip_trace
> (__FILE__, __LINE__, OSIP_ERROR, NULL,
> "eXosip: cannot terminate this call!\n"));
> return i;
> }
> i = eXosip_create_cancel_transaction(jc, jd, request);
> if (i != 0) {
> OSIP_TRACE(osip_trace
> (__FILE__, __LINE__, OSIP_ERROR, NULL,
> "eXosip: cannot initiate SIP transaction!
> \n"));
> return i;
> }
> if (jd != NULL) {
> osip_dialog_free(jd->d_dialog);
> jd->d_dialog = NULL;
> eXosip_update(); /* AMD 30/09/05 */
> }
> return OSIP_SUCCESS;
> }
>
> if (jd == NULL || jd->d_dialog == NULL) {// The code goes there ,
> and so remains in bad state ... and after linphone crashes because I
> have not closed the call and all goes wrong
> OSIP_TRACE(osip_trace
> (__FILE__, __LINE__, OSIP_ERROR, NULL,
> "eXosip: No established dialog!\n"));
> return OSIP_WRONG_STATE;
> }
>
> Thank you.
> Saverio Ieva.
>
>
>
>
> ______________________________________________________________________
> Facile, veloce, sicuro: Prova Hotmail da Internet Explorer 8