Ticket #1936 (closed defect: fixed)

Opened 2 years ago

Last modified 2 years ago

Sending REGISTER always fails after losing network connection

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

Description

Reported that there is a case that sending REGISTER will always fail because regc->has_tsx value is always equal to PJ_TRUE and it is never changed, here is the detail:

  1. when sending SIP REGISTER message, pjsip_regc_send() will first set regc->has_tsx to PJ_TRUE then invoke pjsip_endpt_send_request().
  2. pjsip_tsx_create_uac() fails and callback specified in pjsip_endpt_send_request() param, i.e: regc_tsx_callback(), is not called.
  3. Unfortunately, the callback is the only place where regc->has_tsx will be resetted to PJ_FALSE.
  4. Any future calls to pjsip_regc_send() will return PJ_EBUSY as it thinks there is an outstanding transaction (represented by regc->has_tsx == PJ_TRUE).

Thanks Fredrik Hansson for the report and the fix.

Change History

comment:1 Changed 2 years ago by nanang

  • Status changed from new to closed
  • Resolution set to fixed

In 5353:

Fix #1936: Reset 'regc->has_tsx' when the sending fails.

Note: See TracTickets for help on using tickets.