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

Re: [reSIProcate] Exception encountered when using reSIProcate in a multi-threaded program


Not directly related to the exception.

Spawning a thread for each call is not a good idea
especially if the number of calls is huge and the call
lasts for a long time.

kaiduan
--- Fischl jason <jason.fischl@xxxxxxxxx> wrote:

> Hi Andy,
> 
> Can you provide us with some more information. It
> would be helpful to
> see the stack logs running at Log::Stack. Your stack
> usage looks fine
> to me.
> 
> Is it possible that you are reusing the same
> transaction id (branch
> parameter in Via) for each transaction in your call
> threads? This
> might cause this sort of problem.
> 
> Jason
> 
> 
> On 7/18/05, Andy Agarwal <Andy@xxxxxxxxxxx> wrote:
> >  
> > Hi, 
> >   
> > Let me first describe how i'm using reSIProcate
> (ver. 0.90.5019). 
> >   
> > 1. There is a global SipStack object available to
> all threads in the
> > program. 
> > 2. There is one dedicated 'receiver' thread which
> is the one doing the
> > following in a loop - 
> > while (true)
> > {       
> >   FdSet fdset;
> >   g_sipStack.buildFdSet(fdset);
> >   int err = fdset.selectMilliSeconds(20);
> >   assert (err != -1);
> >   g_sipStack.process(fdset);
> >   SharedPtr<SipMessage>
> receivedMsg(g_sipStack.receive());
> >   if (receivedMsg == NULL) continue; 
> >   
> >   ... Figure out what message this is ...
> >   ... Post a message to the thread that is
> handling this call...
> > }
> > 3. There are many 'call' threads that are using
> the the global SipStack
> > object and calling the send method on it (e.g.
> > g_sipStack.send(*msgInvite),...). For now all they
> do is
> > send an INVITE, wait for an OK, send an ACK and
> then send a BYE shortly
> > after that and wait for the OK for the bye. Thats
> it. 
> > 4. When you run the program, it wil spawn a bunch
> of the above 'call'
> > threads and will wait for them to run and exit. 
> >   
> > So now, if i run my program in Debug mode, i
> encounter this exception after
> > a few calls have already been made successfully - 
> > "Assertion failed in
> > TransactionState::processClientNonInvite -
> > TransactionState.cxx, line 433". 
> > The call stack is as follows - 'Receiver thread'
> is calling sipStack.process
> > which is in turn calling
> TransactionController::process which then calls
> > TransactionState::process which believes that the
> current state is -
> > ClientNonInvite so it calls
> > TransactionState::processClientNonInvite which
> then fails
> > this assertion. 
> >   
> > If i run this program in Release mode, then it
> works fine. 
> >   
> > I'm guessing i'm not using the stack in the right
> way (for a multithreaded
> > program). Can anyone help me here ? 
> >   
> > thanks, 
> > andy 
> >   
> > _______________________________________________
> > resiprocate-devel mailing list
> > resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> >
>
https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
> > 
> >
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel@xxxxxxxxxxxxxxxxxxx
>
https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com