Opened 9 years ago

Last modified 9 years ago

#1875 closed defect

Fixed asertion in rescheduling PJSIP retransmission — at Initial Version

Reported by: ming Owned by: bennylp
Priority: normal Milestone: release-2.4.5
Component: pjsip Version: trunk
Keywords: Cc:
Backport to 1.x milestone: Backported: no

Description

Scenario:

  1. REGISTER without authorization is being sent
  2. It’s retransmitted once, because response isn’t received yet
  3. 401/407 response is received (response to packet in step 1)
  4. PJSIP sends REGISTER with Authorization header
  5. 401/407 is received again as a response to packet retransmitted in step 2
  6. PJSIP tries to send REGISTER with authorization again and it hit an assertion:

pj_assert((tsx->transport_flag & TSX_HAS_PENDING_TRANSPORT) == 0);

stack trace:

#4  0x002deea6 in __assert_fail () from /lib/libc.so.6
#5  0x082cc658 in tsx_resched_retransmission (tsx=0xeb94446c) at ../src/pjsip/sip_transaction.c:2219
#6  0x082cbc32 in send_msg_callback (send_state=0xe3bad828, sent=767, cont=0xf4bfdfcc) at ../src/pjsip/sip_transaction.c:1857
#7  0x082ba2fe in stateless_send_transport_cb (token=0xe3bad828, tdata=0xe3a0f2d4, sent=767) at ../src/pjsip/sip_util.c:1126
#8  0x082bdee2 in transport_send_callback (transport=0x8bcf6e4, token=0xe3a0f2d4, size=767) at ../src/pjsip/sip_transport.c:757
#9  0x082c09d9 in udp_on_write_complete (key=0x8bd7c50, op_key=0xe3a0f310, bytes_sent=767) at ../src/pjsip/sip_transport_udp.c:306
#10 0x082e33a8 in ioqueue_dispatch_write_event (ioqueue=0x8bd79a0, h=0x8bd7c50) at ../src/pj/ioqueue_common_abs.c:399

The assertion is caused because in sip_transaction.c, if there is pending send and reschedule, the pending send may cause the flag TSX_HAS_PENDING_TRANSPORT to be set when sending the pending message (in tsx_send_msg()).

Change History (0)

Note: See TracTickets for help on using tickets.