summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/src/pjsip/sip_transport.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/pjsip/src/pjsip/sip_transport.c b/pjsip/src/pjsip/sip_transport.c
index 556868cf..2f3ceeba 100644
--- a/pjsip/src/pjsip/sip_transport.c
+++ b/pjsip/src/pjsip/sip_transport.c
@@ -659,6 +659,11 @@ PJ_DEF(pj_status_t) pjsip_transport_send( pjsip_transport *tr,
return PJSIP_EPENDINGTX;
}
+ /* Add reference to prevent deletion, and to cancel idle timer if
+ * it's running.
+ */
+ pjsip_transport_add_ref(tr);
+
/* Fill in tp_info. */
tdata->tp_info.transport = tr;
pj_memcpy(&tdata->tp_info.dst_addr, addr, addr_len);
@@ -676,8 +681,10 @@ PJ_DEF(pj_status_t) pjsip_transport_send( pjsip_transport *tr,
*/
if (tr->tpmgr->on_tx_msg) {
status = (*tr->tpmgr->on_tx_msg)(tr->endpt, tdata);
- if (status != PJ_SUCCESS)
+ if (status != PJ_SUCCESS) {
+ pjsip_transport_dec_ref(tr);
return status;
+ }
}
/* Save callback data. */
@@ -699,6 +706,7 @@ PJ_DEF(pj_status_t) pjsip_transport_send( pjsip_transport *tr,
pjsip_tx_data_dec_ref(tdata);
}
+ pjsip_transport_dec_ref(tr);
return status;
}