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

RE: [reSIProcate] DNS Crash?


Christian,
        This sounds similar to a case that was fixed with this update to
TransactionState.cxx.  The TransactionState object was being deleted
early.  Try this out and see if it solves your issue.

http://scm.sipfoundry.org/viewsvn/resiprocate/main/sip/resiprocate/Trans
actionState.cxx?r1=5124&r2=5125&diff_format=l


James

> -----Original Message-----
> From: resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx
[mailto:resiprocate-
> devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of
> Christian_Gavin@xxxxxxxxxxxx
> Sent: Thursday, August 04, 2005 12:46 PM
> To: resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> Subject: [reSIProcate] DNS Crash?
> 
> Hi,
> 
> I am testing a case where a client attempts to REGISTER shortly after
> network connectivity is lost.
> 
> When I launch my client, disable my network adapter, then try to
REGISTER,
> reSIProcates crashes. I have included the stack trace below. assert
causes
> an access violation because the value of "this" is something like
> 0xdddddddd (I also saw 0xfeeefeee).
> 
> I only see this happening shortly after network connectivity is lost.
If I
> try again, I get a DNS 503 "service not available" error, as expected.
If
> I
> wait a while after the network is disabled, the problem does not
occur.
> 
> Has anyone seen this? I am using reSIProcate 0.9
> 
> CG
> 
> >     xxxxxxxx.dll!resip::DnsResult::available()  Line 103 + 0x3  C++
> 
>       DnsResult::Type
>       DnsResult::available()
>       {
> >>       assert(mType != Destroyed);
>          if (mType == Available)
> 
> 
> >
>
xxxxxxxx.dll!resip::TransactionState::sendToWire(resip::TransactionMessa
ge
> * msg=0x02a85458, bool resend=false)  Line 1498 + 0xb C++
> 
>          else if (mDnsResult == 0 && !mIsCancel) // no dns query yet
>          {
>             StackLog (<< "sendToWire with no dns result: " << *this);
>             assert(sip->isRequest());
>             assert(!mIsCancel);
>             mDnsResult =
> mController.mTransportSelector.createDnsResult(this);
>             mController.mTransportSelector.dnsResolve(mDnsResult,
sip);
>             assert(mDnsResult); // !ah! is this really an assertion or
an
> error?
> 
>             // do it now, if there is an immediate result
> >>          if (mDnsResult->available() == DnsResult::Available)
>             {
>                handle(mDnsResult);
>             }
> 
> >
>
xxxxxxxx.dll!resip::TransactionState::processClientNonInvite(resip::Tran
sa
> ctionMessage
>  * msg=0x02a85458)  Line 444  C++
> 
>       void
>       TransactionState::processClientNonInvite(TransactionMessage*
msg)
>       {
>          StackLog (<< "TransactionState::processClientNonInvite: " <<
> msg->brief());
> 
>          assert(!isInvite(msg));
> 
>          if (isRequest(msg) && isFromTU(msg))
>          {
>             //StackLog (<< "received new non-invite request");
>             SipMessage* sip = dynamic_cast<SipMessage*>(msg);
>             delete mMsgToRetransmit;
>             mMsgToRetransmit = sip;
>             mController.mTimers.add(Timer::TimerF, mId, Timer::TF);
>       >>      sendToWire(sip);  // don't delete
>          }
>          else if (isResponse(msg) && isFromWire(msg)) // from the wire
>       ...
> 
> 
> >
>
xxxxxxxx.dll!resip::TransactionState::process(resip::TransactionControll
er
> & controller={...})  Line 353 C++
> 
>       ...
>       switch (state->mMachine)
>       {
>          case ClientNonInvite:
> >>            state->processClientNonInvite(message);
>             break;
>          case ClientInvite:
>       ...
> 
> >     xxxxxxxx.dll!resip::TransactionController::process(resip::FdSet
&
> fdset={...})  Line 91 + 0x9   C++
> 
>             ...
>             while (mStateMacFifo.messageAvailable())
>             {
>                if (mStateless)
>                {
>                   mStatelessHandler.process();
>                }
>                else
>                {
> >>                TransactionState::process(*this);
>                }
>             }
>          }
>       }
> 
> 
> >     xxxxxxxx.dll!resip::SipStack::process(resip::FdSet &
fdset={...})
> Line 422    C++
> 
>       void
>       SipStack::process(FdSet& fdset)
>       {
>          if(!mShuttingDown)
>          {
>             RESIP_STATISTICS(mStatsManager.process());
>          }
>          mTransactionController.process(fdset);
> >>       mTuSelector.process();
> 
>          Lock lock(mAppTimerMutex);
>          mAppTimers.process();
>       }
> 
> >     xxxxxxxx.dll!CSIPStack::ThreadProc(void *
lpParameter=0x00000000)
> Line 462    C++
>                   ...
>                   stackUac.process(fdset);
> >>                while(clientDum.process());
>                   ...
> 
> >     xxxxxxxx.dll!CWorkerThread::StaticThreadProc(void *
> lpParameter=0x015467b4)  Line 86 + 0x10   C++
> 
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel