summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2014-03-31 10:19:27 +0000
committerLiong Sauw Ming <ming@teluu.com>2014-03-31 10:19:27 +0000
commit27e40a66ff8694f41d78ef3b1df5835105aa6106 (patch)
tree10e2e5398a8a156aba799be67bdf9881dcd00d2b /pjsip
parent953b2c6b19238d1ac7255dc088689f4434d775a9 (diff)
Fixed #1756: Race condition in SIP transaction termination (thanks to Kevin Harwell for the patch)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4807 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/src/pjsip/sip_transaction.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c
index dfb0751b..d8af39e4 100644
--- a/pjsip/src/pjsip/sip_transaction.c
+++ b/pjsip/src/pjsip/sip_transaction.c
@@ -1610,14 +1610,14 @@ PJ_DEF(pj_status_t) pjsip_tsx_terminate( pjsip_transaction *tsx, int code )
PJ_ASSERT_RETURN(code >= 200, PJ_EINVAL);
- if (tsx->state >= PJSIP_TSX_STATE_TERMINATED)
- return PJ_SUCCESS;
-
pj_log_push_indent();
pj_grp_lock_acquire(tsx->grp_lock);
- tsx_set_status_code(tsx, code, NULL);
- tsx_set_state( tsx, PJSIP_TSX_STATE_TERMINATED, PJSIP_EVENT_USER, NULL);
+
+ if (tsx->state < PJSIP_TSX_STATE_TERMINATED) {
+ tsx_set_status_code(tsx, code, NULL);
+ tsx_set_state( tsx, PJSIP_TSX_STATE_TERMINATED, PJSIP_EVENT_USER, NULL);
+ }
pj_grp_lock_release(tsx->grp_lock);
pj_log_pop_indent();