diff options
author | Liong Sauw Ming <ming@teluu.com> | 2014-03-31 10:19:27 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2014-03-31 10:19:27 +0000 |
commit | 27e40a66ff8694f41d78ef3b1df5835105aa6106 (patch) | |
tree | 10e2e5398a8a156aba799be67bdf9881dcd00d2b | |
parent | 953b2c6b19238d1ac7255dc088689f4434d775a9 (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
-rw-r--r-- | pjsip/src/pjsip/sip_transaction.c | 10 |
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(); |