Ver Fonte

tm: backup and restore existing T-references for rpc tm.cancel

- GH #4011
Daniel-Constantin Mierla há 10 meses atrás
pai
commit
879e074c45
1 ficheiros alterados com 5 adições e 1 exclusões
  1. 5 1
      src/modules/tm/t_cancel.c

+ 5 - 1
src/modules/tm/t_cancel.c

@@ -403,9 +403,10 @@ void rpc_cancel(rpc_t *rpc, void *c)
 	static char cseq[128], callid[128];
 	struct cancel_info cancel_data;
 	int i, j;
-
 	str cseq_s;	  /* cseq */
 	str callid_s; /* callid */
+	tm_cell_t *orig_t = NULL;
+	int orig_branch;
 
 	cseq_s.s = cseq;
 	callid_s.s = callid;
@@ -416,6 +417,8 @@ void rpc_cancel(rpc_t *rpc, void *c)
 		return;
 	}
 
+	orig_t = get_t();
+	orig_branch = get_t_branch();
 	if(t_lookup_callid(&trans, callid_s, cseq_s) < 0) {
 		LM_DBG("Lookup failed\n");
 		rpc->fault(c, 400, "Transaction not found");
@@ -430,6 +433,7 @@ void rpc_cancel(rpc_t *rpc, void *c)
 
 	/* t_lookup_callid REF`d the transaction for us, we must UNREF here! */
 	UNREF(trans);
+	set_t(orig_t, orig_branch);
 	j = 0;
 	while(i) {
 		j++;