Module: kamailio
Branch: master
Commit: 3c086a85b99d59dabc48f77893d4c68199af0577
URL:
https://github.com/kamailio/kamailio/commit/3c086a85b99d59dabc48f77893d4c68…
Author: Federico Cabiddu <federico.cabiddu(a)gmail.com>
Committer: Federico Cabiddu <federico.cabiddu(a)gmail.com>
Date: 2015-10-07T09:29:39+02:00
tsilo: unref the transaction after appending new branches
---
Modified: modules/tsilo/ts_append.c
---
Diff:
https://github.com/kamailio/kamailio/commit/3c086a85b99d59dabc48f77893d4c68…
Patch:
https://github.com/kamailio/kamailio/commit/3c086a85b99d59dabc48f77893d4c68…
---
diff --git a/modules/tsilo/ts_append.c b/modules/tsilo/ts_append.c
index 1079632..4e8f172 100644
--- a/modules/tsilo/ts_append.c
+++ b/modules/tsilo/ts_append.c
@@ -72,24 +72,32 @@ int ts_append(struct sip_msg* msg, str *ruri, char *table) {
int ts_append_to(struct sip_msg* msg, int tindex, int tlabel, char *table, str *uri) {
struct cell *t;
+ struct cell *orig_t;
struct sip_msg *orig_msg;
int ret;
+ orig_t = _tmb.t_gett();
+
if(_tmb.t_lookup_ident(&t, tindex, tlabel) < 0)
{
LM_ERR("transaction [%u:%u] not found\n",
tindex, tlabel);
- return -1;
+ ret = -1;
+ goto done;
}
+
if (t->flags & T_CANCELED) {
LM_DBG("trasaction [%u:%u] was cancelled\n",
tindex, tlabel);
- return -2;
+ ret = -2;
+ goto done;
}
+
if (t->uas.status >= 200) {
LM_DBG("trasaction [%u:%u] sent out a final response already - %d\n",
tindex, tlabel, t->uas.status);
- return -3;
+ ret = -3;
+ goto done;
}
orig_msg = t->uas.request;
@@ -99,10 +107,20 @@ int ts_append_to(struct sip_msg* msg, int tindex, int tlabel, char
*table, str *
} else {
ret = _regapi.lookup_to_dset(orig_msg, table, uri);
}
+
if(ret != 1) {
LM_DBG("transaction %u:%u: error updating dset (%d)\n", tindex, tlabel,
ret);
- return -4;
+ ret = -4;
+ goto done;
}
-
- return _tmb.t_append_branches();
+
+ ret = _tmb.t_append_branches();
+
+done:
+ /* unref the transaction which had been referred by t_lookup_ident() call.
+ * Restore the original transaction (if any) */
+ _tmb.unref_cell(t);
+ _tmb.t_sett(orig_t, T_BR_UNDEFINED);
+
+ return ret;
}