On Mon, 2006-11-06 at 14:52 +0100, Andrzej Ciarkowski wrote:
> Hello,
> There seems to be a bug in SipRefreshMgr.cpp lines 1261 - 1275
> (media-update branch):
> 
>             SipMessage * msgInList = NULL;
>             
>             // Log Failures
>             syslog(FAC_REFRESH_MGR, PRI_ERR, "unable to send %s 
> (transport):\ncallid=%s",
>                     method.data(), callid.data()) ;
> 
>             //reschedule only if expires value is not zero otherwise it means 
> we just did an unregister
>             if ( !isExpiresZero(sipMsg) )
>             {
>                sendToObservers(eventMessage, msgInList);
>                     
>                // try again after default time out
>                rescheduleAfterTime(msgInList, FAILED_PERCENTAGE_TIMEOUT);
>             }
>             messageProcessed = TRUE;
> 
> Pointer msgInList is never assigned any value and sendToObservers() is
> effectively called with NULL pointer, which results in Access
> Violation. I'm not sure what should be the exact solution here, as I'm
> not very familiar with this code (I'm evaluating sipXtapi code as a
> possible base for SIP client).

I've tried to track down why that is, and it goes back to a mass merge
that was done over a year ago, so I don't have good history information.
But it does look like this block of lines has been lost:

            // Log Failures
            syslog(FAC_REFRESH_MGR, PRI_ERR, "unable to send %s 
(transport):\ncallid=%s",
                    method.data(), callid.data()) ;
-----
            if ( method.compareTo(SIP_REGISTER_METHOD) == 0 )
            {
                //remove using call id instead of from field because the from in
                //startup unregister is same as the actual register request.

               SipMessage *pTmpMessage = mRegisterList.isSameCallId(callid);

                // make a copy in case the message in list is removed
                if ( pTmpMessage )
                    msgInList = new SipMessage(*pTmpMessage);
            }
            else
            {
                //remove using call id instead of from field because the from in
                //startup unregister is same as the actual register request.
                SipMessage *pTmpMessage = mSubscribeList.isSameCallId(callid);

                // make a copy in case the message in list is removed
                if ( pTmpMessage )
                    msgInList = new SipMessage(*pTmpMessage);
            }
-----
            
            //reschedule only if expires value is not zero otherwise it means 
we just did an unregister

Dale


_______________________________________________
sipxtapi-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/

Reply via email to