Module: sip-router
Branch: 3.1
Commit: 1e14827ab627db52eae556a027838cc64d3a57cd
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=1e14827…
Author: Andrei Pelinescu-Onciul <andrei(a)iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei(a)iptel.org>
Date: Thu May 5 00:43:48 2011 +0200
tcp: fix send2child() error case
If send2child() fails don't decrement the refcnt if the connection
was already removed from the hash due to some other previous
error (very unlikely, but possible).
(cherry picked from commit a8859f52b9dab4b3a79babe19f3d30c3dfcb95ce)
---
tcp_main.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/tcp_main.c b/tcp_main.c
index 028fdfb..ac76dc5 100644
--- a/tcp_main.c
+++ b/tcp_main.c
@@ -4036,8 +4036,8 @@ static inline int handle_new_connect(struct socket_info* si)
su2a(&su, sizeof(su)), tcpconn, tcpconn->s, tcpconn->flags);
if(unlikely(send2child(tcpconn)<0)){
tcpconn->flags&=~F_CONN_READER;
- tcpconn_put(tcpconn);
- tcpconn_try_unhash(tcpconn);
+ if (tcpconn_try_unhash(tcpconn))
+ tcpconn_put(tcpconn);
tcpconn_put_destroy(tcpconn);
}
#endif
@@ -4226,8 +4226,8 @@ send_to_child:
tcpconn->flags&=~F_CONN_WRITE_W;
}
#endif /* TCP_ASYNC */
- tcpconn_put(tcpconn);
- tcpconn_try_unhash(tcpconn);
+ if (tcpconn_try_unhash(tcpconn))
+ tcpconn_put(tcpconn);
tcpconn_put_destroy(tcpconn); /* because of the tcpconn_ref() */
}
}