From 65b62d83ee72012d1171f1813b8f989f8805497c Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Wed, 15 May 2013 11:57:09 +0200 Subject: Don't crash on reading invalid messages. Also, invoke disconnected callback and close connection in error cases. --- lib/conn.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'lib/conn.c') diff --git a/lib/conn.c b/lib/conn.c index f89ac70..499c330 100644 --- a/lib/conn.c +++ b/lib/conn.c @@ -20,19 +20,6 @@ #include "tcp.h" int -conn_close (struct rs_connection **connp) -{ - int r = 0; - assert (connp); - assert (*connp); - if ((*connp)->is_connected) - r = rs_conn_disconnect (*connp); - if (r == RSE_OK) - *connp = NULL; - return r; -} - -int conn_user_dispatch_p (const struct rs_connection *conn) { assert (conn); @@ -145,6 +132,25 @@ rs_conn_disconnect (struct rs_connection *conn) assert (conn); + if (conn->is_connected) + event_on_disconnect (conn); + + if (conn->bev) + { + bufferevent_free (conn->bev); + conn->bev = NULL; + } + if (conn->rev) + { + event_free (conn->rev); + conn->rev = NULL; + } + if (conn->wev) + { + event_free (conn->wev); + conn->wev = NULL; + } + err = evutil_closesocket (conn->fd); conn->fd = -1; return err; -- cgit v1.1