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

[reSIProcate] assertion: "DUM let me send a BYE at an incorrectstate"


Hi all,

I’m reopening this topic because I think it is not totally fixed. I had the exact same problem due to thread concurrency.
So, the original fix was:

if(!isTerminated())   // make sure application didn't call end()

{

      dispatchConnected(msg);  // act as if we received message in Connected state

}

else

{

      dispatchTerminated(msg);

}

 

But imagine that the application did not call end() from onOfferRequestRejected but pushed an event for another thread (in my case I call it CallManager). In this case, the !isTerminated test will pass and dispatchConnected will be executed. Inside this method, there is this code:

case OnInviteReliableOffer:

*mLastRemoteSessionModification = msg;

transition(ReceivedReinvite);

 

If the context switches to the other thread before transition(ReceivedReinvite) and my CallManager thread sends a BYE (calls end()), the code would end up in the same situation when receiving the 200-OK for the BYE and would crash (assert(0)).
I don’t know what would be the final solution for this since I don’t know much of resiprocate code. Does anyone have a solution for this? Thanks in advance.