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