Pārlūkot izejas kodu

tcp: fix connection alias replacing

When the TCP_ALIAS_REPLACE is set and an alias has to be added to
a connection that had 0 aliases (it can happen due to
TCP_ALIAS_REPLACE flag), the connection aliases count was wrongly
forced to 1.
For more details see:
http://lists.sip-router.org/pipermail/sr-users/2012-October/074932.html

Patch-by Jijo
Andrei Pelinescu-Onciul 13 gadi atpakaļ
vecāks
revīzija
e71435b027
1 mainītis faili ar 7 papildinājumiem un 4 dzēšanām
  1. 7 4
      tcp_main.c

+ 7 - 4
tcp_main.c

@@ -1339,11 +1339,14 @@ int tcpconn_finish_connect( struct tcp_connection* c,
 			/* remove all the aliases except the first one and re-add them
 			 * (there shouldn't be more then the 3 default aliases at this 
 			 * stage) */
-			for (r=1; r<c->aliases; r++){
-				a=&c->con_aliases[r];
-				tcpconn_listrm(tcpconn_aliases_hash[a->hash], a, next, prev);
+			if (c->aliases > 1) {
+				for (r=1; r<c->aliases; r++){
+					a=&c->con_aliases[r];
+					tcpconn_listrm(tcpconn_aliases_hash[a->hash],
+									a, next, prev);
+				}
+				c->aliases=1;
 			}
-			c->aliases=1;
 			/* add the local_ip:0 and local_ip:local_port aliases */
 			_tcpconn_add_alias_unsafe(c, c->rcv.src_port, &c->rcv.dst_ip,
 												0, new_conn_alias_flags);