Module: sip-router Branch: master Commit: a8859f52b9dab4b3a79babe19f3d30c3dfcb95ce URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a8859f52...
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).
---
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() */ } }