< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index Next in Thread >

Re: [reSIProcate-users] DialogSet NULL pointer


Sounds like you might be calling end() from a thread that is not the DUM processing thread.

https://www.resiprocate.org/DUM_Threading

Scott


On Thu, Aug 3, 2017 at 2:36 PM, Francesco Lamonica <alienpenguin@xxxxxxxxx> wrote:
Hi all,
i program i wrote using resiprocate crashed with the following stack trace:

#0 resip::Dialog::end (this=0x0) at Dialog.cxx:350
0000001 0x00007ffff198dfac in resip::DialogSet::end (this=0x7fffa8312030) at DialogSet.cxx:1027
0000002 0x00007ffff56958d4 in ReSipHandler::sendBye (this=0x7fffa82864a0, linePtr=0x7fffa82851b0) at src/ReSipHandler.cpp:639
0000003 0x00007ffff5611aad in MyApp::abortCall (this=0x7fffd8043410, lid=0) at src/MyApp.cpp:6702

As you can see there is a NULL pointer (Dialog) that is called from the line 1027 of DialogSet:

1021       case Established:
1022       {  
1023          for (DialogMap::iterator it = mDialogs.begin(); it != mDialogs.end(); ++it)
1024          {  
1025             try
1026             {  
1027                it->second->end();
1028             }
1029             catch(UsageUseException& e)
1030             {  
1031                InfoLog (<< "Caught: " << e);
1032             }
1033          }            
1034          mState = Terminating;
1035          break;
1036       }

So it seems that it->second is NULL.
the caller is a class (ResipCallData) that i wrote inheriting from AppDialogSet as (hopefully) per the examples in the documentation and that was used to create the InviteSession.

the crash happened while trying to end the call like this (SendBye):

    ResipCallData *h = linePtr->getSipSession();

    if (!h) {
        qCritical() << "Could not find the handle for the call";
        *logger << UNQL::LOG_CRITICAL << "Cannot find the handle for the call to terminate on line "
                << linePtr->getLineId() << UNQL::EOM;
        return SipStackError;
    }

    AppDialogSetHandle adsh = h->getHandle();
    if (!adsh.isValid())
        qCritical() << Q_FUNC_INFO << "Invalid ADSH!";

    h->end(); // <-- This is where the crash happened.

From what i gathered the session was getting closed from the remote party as well when this happened.

Do you have any insight of what i might be checking?

thanks in advance

_______________________________________________
resiprocate-users mailing list
resiprocate-users@resiprocate.org
List Archive: http://list.resiprocate.org/archive/resiprocate-users/