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

[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::TransactionMessage
* 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::TransactionMessage
 * 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::TransactionController
& 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++