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

Diego Carvalho Domingos ddomingos at daitangroup.com
Wed Feb 24 12:24:00 CST 2016


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.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20160224/a0aa2fe8/attachment.htm>


More information about the resiprocate-devel mailing list