[pjsip] Assertion failure in sip_transaction.c
bennylp at pjsip.org
Mon Nov 26 22:34:17 EST 2007
Michael Broughton wrote:
> I am running into a crashing problem with pjsip. It does not happen very
> often, this particular crash has happened four or five times over the
> last few weeks (making tens of thousands of calls). The application is
> uses pjsua-lib.
> pj_assert(event->body.timer.entry == &tsx->timeout_timer);
> Each time the above pointer comparison has failed, there has been
> exactly 48 bytes difference between the two pointers.
> I have not had the opportunity to become familiar with the sip part of
> pjsip, so I am hoping someone can shed some light on this issue. I have
> saved all of my core dumps and some of my log files if anymore
> information is required.
I can't say with certainty of what have caused this, since in my
pjsip copy (0.8.0) pjsip/sip_transaction.c:2758 points to different
code, but I assume it's the assertion in
tsx_on_state_completed_uac() function, is it right?
Are you on 64bit machine? If so, then the 48 bytes difference may
indicate that the event->body.timer.entry is a retransmit timer
entry. Could you have a look at pjsip_transaction declaration in
sip_transaction.h, and see if this makes sense? Hopefully this is
true, since at least we know that the memory pool is still intact.
If so, then the assertion occurred because the transaction got a
retransmit timer event in Completed state, while it only expects to
get timeout event to destroy the transaction. Perhaps a simple fix
would be simply to ignore this retransmit request rather than
throwing an assertion.
More information about the pjsip