< Previous by Date | Date Index | Next by Date > |
< Previous in Thread | Thread Index | Next in Thread > |
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.
_______________________________________________
resiprocate-devel mailing list
resiprocate-devel@xxxxxxxxxxxxxxx
https://list.resiprocate.org/mailman/listinfo/resiprocate-devel