Module: kamailio Branch: master Commit: 52c4965bbb4cde5d7bddcf697aa504e7c2202ac1 URL: https://github.com/kamailio/kamailio/commit/52c4965bbb4cde5d7bddcf697aa504e7c2202ac1
Author: Daniel-Constantin Mierla <[email protected]> Committer: Daniel-Constantin Mierla <[email protected]> Date: 2015-09-14T12:45:28+02:00 tm: test if transaction was suspended before resuming inside t_continue() --- Modified: modules/tm/t_suspend.c --- Diff: https://github.com/kamailio/kamailio/commit/52c4965bbb4cde5d7bddcf697aa504e7c2202ac1.diff Patch: https://github.com/kamailio/kamailio/commit/52c4965bbb4cde5d7bddcf697aa504e7c2202ac1.patch --- diff --git a/modules/tm/t_suspend.c b/modules/tm/t_suspend.c index 67572b6..1ca56db 100644 --- a/modules/tm/t_suspend.c +++ b/modules/tm/t_suspend.c @@ -106,10 +106,10 @@ int t_suspend(struct sip_msg *msg, * - failure route to be executed if the branch is not continued * before timeout */ t->uac[t->async_backup.blind_uac].on_failure = t->on_failure; + t->flags |= T_ASYNC_SUSPENDED; } else { LM_DBG("this is a suspend on reply - setting msg flag to SUSPEND\n"); msg->msg_flags |= FL_RPL_SUSPENDED; - t->flags |= T_ASYNC_SUSPENDED; /* this is a reply suspend find which branch */ if (t_check( msg , &branch )==-1){ @@ -131,6 +131,7 @@ int t_suspend(struct sip_msg *msg, LM_DBG("saving transaction data\n"); t->uac[branch].reply->flags = msg->flags; + t->flags |= T_ASYNC_SUSPENDED; } *hash_index = t->hash_index; @@ -176,7 +177,13 @@ int t_continue(unsigned int hash_index, unsigned int label, return -1; } + if (!(t->flags & T_ASYNC_SUSPENDED)) { + LM_ERR("transaction is not suspended [%u:%u]\n", hash_index, label); + return -2; + } + if (t->flags & T_CANCELED) { + t->flags &= ~T_ASYNC_SUSPENDED; /* The transaction has already been canceled, * needless to continue */ UNREF(t); /* t_unref would kill the transaction */ @@ -219,6 +226,7 @@ int t_continue(unsigned int hash_index, unsigned int label, /* Either t_continue() has already been * called or the branch has already timed out. * Needless to continue. */ + t->flags &= ~T_ASYNC_SUSPENDED; UNLOCK_ASYNC_CONTINUE(t); UNREF(t); /* t_unref would kill the transaction */ return 1; @@ -444,12 +452,14 @@ int t_continue(unsigned int hash_index, unsigned int label, t->uac[branch].reply = 0; } - t->flags &= ~T_ASYNC_SUSPENDED; /*This transaction is no longer suspended so unsetting the SUSPEND flag*/ + /*This transaction is no longer suspended so unsetting the SUSPEND flag*/ + t->flags &= ~T_ASYNC_SUSPENDED; return 0; kill_trans: + t->flags &= ~T_ASYNC_SUSPENDED; /* The script has hopefully set the error code. If not, * let us reply with a default error. */ if ((kill_transaction_unsafe(t, _______________________________________________ sr-dev mailing list [email protected] http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
