Skip to content

Commit

Permalink
tm: test if transaction was suspended before resuming inside t_contin…
Browse files Browse the repository at this point in the history
…ue()

(cherry picked from commit 52c4965)
  • Loading branch information
miconda committed Sep 17, 2015
1 parent 0c6bed8 commit c58d4c4
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion modules/tm/t_suspend.c
Expand Up @@ -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){
Expand All @@ -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;
Expand Down Expand Up @@ -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 */
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -443,9 +451,14 @@ int t_continue(unsigned int hash_index, unsigned int label,
sip_msg_free(t->uac[branch].reply);
t->uac[branch].reply = 0;
}

/*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,
Expand Down

0 comments on commit c58d4c4

Please sign in to comment.