Module: sip-router Branch: master Commit: ffdae5987b99b9bfd39992d407a3a0a33aa772ab URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=ffdae598...
Author: Hugh Waite hugh.waite@crocodile-rcs.com Committer: Hugh Waite hugh.waite@crocodile-rcs.com Date: Thu Jul 4 10:30:51 2013 +0100
core: Fix connection leak with websockets
- Decrease connection ref count after using connection
---
forward.h | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/forward.h b/forward.h index 175c53d..4680a8e 100644 --- a/forward.h +++ b/forward.h @@ -134,6 +134,7 @@ static inline int msg_send(struct dest_info* dst, char* buf, int len) union sockaddr_union local_addr; struct tcp_connection *con = NULL; struct ws_event_info wsev; + int ret; #endif outb.s = buf; @@ -162,13 +163,13 @@ static inline int msg_send(struct dest_info* dst, char* buf, int len) con = tcpconn_get(dst->id, 0, 0, 0, 0); else { LM_CRIT("BUG: msg_send called with null_id & to\n"); - return -1; + goto error; }
if (con == NULL) { LM_WARN("TCP/TLS connection for WebSocket could not be found\n"); - return -1; + goto error; }
memset(&wsev, 0, sizeof(ws_event_info_t)); @@ -176,7 +177,9 @@ static inline int msg_send(struct dest_info* dst, char* buf, int len) wsev.buf = outb.s; wsev.len = outb.len; wsev.id = con->id; - return sr_event_exec(SREV_TCP_WS_FRAME_OUT, (void *) &wsev); + ret = sr_event_exec(SREV_TCP_WS_FRAME_OUT, (void *) &wsev); + tcpconn_put(con); + return ret; } #endif