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

[reSIProcate] Please give opinion on my solution on "make call crash"


resip all

I had modified the dum source to add serval protection(Guard) on following, and 
my test will never crashed for 1,200,000 calls(just got 603).

0, add private member variable "Mutex lock" for class DialogUasageManager and 
class HandleManager respectively

1, DialogUasageManager.cxx, near line 425

DialogSet*
DialogUsageManager::makeUacDialogSet(BaseCreator* creator, AppDialogSet* appDs)
{
        Guard guard(lock);

   if (mDumShutdownHandler)

        
2, DialogUasageManager.cxx, near line 1540

void
DialogUsageManager::processRequest(const SipMessage& request)
{
....
case REGISTER:
         {
            {
               DialogSetId id(request);
               //cryptographically dangerous
                           Guard guard(lock);
               assert(mDialogSetMap.find(id) == mDialogSetMap.end());
            }

3,  DialogUasageManager.cxx, near line 1553

     try
            {
                                Guard guard(lock);

               DialogSet* dset =  new DialogSet(request, *this);


4,  DialogUasageManager.cxx, near line 1707

DialogSet*
DialogUsageManager::findDialogSet(const DialogSetId& id)
{
        Guard guard(lock);

5,  DialogUasageManager.cxx, near line 1747

void
DialogUsageManager::removeDialogSet(const DialogSetId& dsId)
{
        Guard guard(lock);


6,  DialogUasageManager.cxx, near line 1851

void
DialogUsageManager::applyToAllServerSubscriptions(ServerSubscriptionFunctor* 
functor)
{
        Guard guard(lock);


7,  DialogUasageManager.cxx, near line 1870

void
DialogUsageManager::applyToAllClientSubscriptions(ClientSubscriptionFunctor* 
functor)
{
        Guard guard(lock);
   assert(functor);

8, HandleManager.cxx, near line 34

Handled::Id
HandleManager::create(Handled* handled)
{
        Guard guard(lock);

   mHandleMap[++mLastId] = handled;
   return mLastId;
}

9, HandleManager.cxx, near line 76

void
HandleManager::remove(Handled::Id id)
{
        Guard guard(lock);

   HandleMap::iterator i = mHandleMap.find(id);


10, HandleManager.cxx, near line 108 

bool
HandleManager::isValidHandle(Handled::Id id)
{
   //!dcm! -- fix; use find
        Guard guard(lock);
   return mHandleMap.count(id) != 0;
}

11,  HandleManager.cxx, near line 115

Handled*
HandleManager::getHandled(Handled::Id id) 
{
        Guard guard(lock);

   HandleMap::const_iterator i = mHandleMap.find(id);


>resip all,
>
>I made a small program to test outbound call for resiprocate 1.0(revision 
>6527), following is the scenario 
>
>1, make call to a non-exists DNIS
>2, dum got onFailure event with 603
>3, dum got onTerminated event
>4, repeat 1-3
>
>I wanna make 10000 calls to test, but often got error after several call
>
>Register SIP Account: "testua"<sip:52412300@xxxxxxxxxxxxxx>
>Logged in: 2201@xxxxxxxxxxxxxx
>
>[Line 0] Got failure response from UAS - 603
>[Line 0] call terminated.
>[Line 1] Got failure response from UAS - 603
>[Line 1] call terminated.
>[Line 2] Got failure response from UAS - 603
>[Line 2] call terminated.
>[Line 3] Got failure response from UAS - 603
>[Line 3] call terminated.
>[Line 4] Got failure response from UAS - 603
>[Line 4] call terminated.
>[Line 5] Got failure response from UAS - 603
>[Line 5] call terminated.
>[Line 6] Got failure response from UAS - 603
>[Line 6] call terminated.
>[Line 7] Got failure response from UAS - 603
>[Line 7] call terminated.
>[Line 8] Got failure response from UAS - 603
>[Line 8] call terminated.
>[Line 9] Got failure response from UAS - 603
>[Line 9] call terminated.
>[Line 10] Got failure response from UAS - 603
>[Line 10] call terminated.
>Assertion failed: 0, file .\HandleManager.cxx, line 114
>
>I saw the HandleManager.cxx, line 114, means "Stale handle", can anyone help 
>me to avoid this error, because I must get failure reason for every SipCall(it 
>is my own AppDialogSet), so I have to do  h->getAppDialogSet().get() in the 
>onFailure callback
>
>Attachment is my simple test program, you can compile it in VS.2005, MAY BE 
>YOU CAN FIND MY USAGE ERROR ON RESIP!!!
>
>Thanks
>
>
>
>        maodonghu
>        hhmmdd@xxxxxxx
>          2006-08-22
>_______________________________________________
>resiprocate-devel mailing list
>resiprocate-devel@xxxxxxxxxxxxxxxxxxx
>https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel


                                 
        maodonghu
        hhmmdd@xxxxxxx
          2006-08-24