[sr-dev] git:3.1: tcp: fix send2child() error case
Andrei Pelinescu-Onciul
andrei at iptel.org
Thu May 5 00:47:40 CEST 2011
Module: sip-router
Branch: 3.1
Commit: 1e14827ab627db52eae556a027838cc64d3a57cd
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=1e14827ab627db52eae556a027838cc64d3a57cd
Author: Andrei Pelinescu-Onciul <andrei at iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei at 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() */
}
}
More information about the sr-dev
mailing list