[reSIProcate] assert in sendToWire

Byron Campen bcampen at estacado.net
Mon Jan 22 15:07:54 CST 2007


	Ok, here's what I propose doing:

Index: resip/stack/TransactionState.cxx
===================================================================
*** resip/stack/TransactionState.cxx    (revision 6902)
--- resip/stack/TransactionState.cxx    (working copy)
***************
*** 1758,1778 ****
      else // reuse the last dns tuple
      {
         assert(sip->isRequest());
!       assert(mTarget.getType() != UNKNOWN_TRANSPORT);
!       if (resend)
         {
!          if (mTarget.transport)
            {
!             mController.mTransportSelector.retransmit(sip, mTarget);
            }
            else
            {
!             DebugLog (<< "No transport found(network could be down)  
for " << sip->brief());
            }
         }
         else
         {
!          mController.mTransportSelector.transmit(sip, mTarget);
         }
      }
   }
--- 1758,1793 ----
      else // reuse the last dns tuple
      {
         assert(sip->isRequest());
!       if(mTarget.getType() != UNKNOWN_TRANSPORT)
         {
!          if (resend)
            {
!             if (mTarget.transport)
!             {
!                mController.mTransportSelector.retransmit(sip,  
mTarget);
!             }
!             else
!             {
!                DebugLog (<< "No transport found(network could be  
down) for " << sip->brief());
!             }
            }
            else
            {
!             mController.mTransportSelector.transmit(sip, mTarget);
            }
         }
         else
         {
!          // !bwc! While the resolver was attempting to find a  
target, another
!          // request came down from the TU. This could be a bug in  
the TU, or
!          // could be a retransmission of an ACK/200. Either way, we  
cannot
!          // expect to ever be able to send this request (nowhere to  
store it
!          // temporarily).
!          DebugLog(<< "Received a second request from the TU for a  
transaction"
!                      " that already existed, before the DNS  
subsystem was done "
!                      "resolving the target for the first request.  
Either the TU"
!                      " has messed up, or it is retransmitting ACK/ 
200 (the only"
!                      " valid case for this to happen)");
         }
      }
   }

Any thoughts?

Best regards,
Byron Campen


>
>
> Byron Campen wrote:
>>     This is a bug that was noticed a little while back. It was
>> occurring when repro was trying to retransmit an ACK before the DNS
>> lookup for the first had completed. (This can happen easily if we get
>> multiple responses rapidly, or the DNS servers are being very slow)
>> This bug was uncovered in repro due to the fact that it had  
>> previously
>> been putting a different tid on each ACK, meaning that a separate
>> TransactionState was being maintained for each ACK, so we never had a
>> second ACK hitting the same TransactionState to trigger the bug. I'll
>> look into fixing this.
>>
>
> Thanks for the quick response - I can confirm that my DNS is
> occasionally a little slow, the machine in question is about to get a
> memory upgrade.
>
>
>
>> Best regards,
>> Byron Campen
>>
>>>
>>>
>>> On Saturday, I updated to the latest version of reSIProcate from SVN
>>> (6901).
>>>
>>> Since then, I've been getting this assert() occasionally:
>>>
>>>    else // reuse the last dns tuple
>>>    {
>>>       assert(sip->isRequest());
>>>       assert(mTarget.getType() != UNKNOWN_TRANSPORT);  // line  
>>> 1761 ****
>>>       if (resend)
>>>       {
>>>          if (mTarget.transport)
>>>
>>> Does anyone have any ideas about the cause of this?
>>>
>>> #0  0xb7343947 in raise () from /lib/tls/libc.so.6
>>> (gdb) bt
>>> #0  0xb7343947 in raise () from /lib/tls/libc.so.6
>>> #1  0xb7345212 in abort () from /lib/tls/libc.so.6
>>> #2  0xb733d05f in __assert_fail () from /lib/tls/libc.so.6
>>> #3  0xb7d3d95b in resip::TransactionState::sendToWire  
>>> (this=0xb6968c00,
>>>     msg=0xb6985e18, resend=false) at TransactionState.cxx:1761
>>> #4  0xb7d40344 in resip::TransactionState::processStateless
>>> (this=0xb6968c00,
>>>     message=0xb6985e18) at TransactionState.cxx:523
>>> #5  0xb7d443e3 in resip::TransactionState::process
>>> (controller=@0xb725eb8c)
>>>     at TransactionState.cxx:262
>>> #6  0xb7d338aa in resip::TransactionController::process
>>> (this=0xb725eb8c,
>>>     fdset=@0xbfffdcd0) at TransactionController.cxx:83
>>>
>>> _______________________________________________
>>> resiprocate-devel mailing list
>>> resiprocate-devel at list.resiprocate.org
>>> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>>
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel at list.resiprocate.org
> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2423 bytes
Desc: not available
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20070122/bb5e4211/attachment.bin>


More information about the resiprocate-devel mailing list