Module: sip-router Branch: 3.1 Commit: 1e14827ab627db52eae556a027838cc64d3a57cd URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=1e14827a...
Author: Andrei Pelinescu-Onciul andrei@iptel.org Committer: Andrei Pelinescu-Onciul andrei@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() */ } }