From 89c0b2a6d863e54bd0253355146f09b92edeccda Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Sat, 28 Feb 2015 23:15:23 +0800
Subject: [PATCH] Add cleanup

--HG--
branch : fastopen
---
 common-session.c | 2 ++
 netio.c          | 7 +++++++
 netio.h          | 4 ++++
 3 files changed, 13 insertions(+)

diff --git a/common-session.c b/common-session.c
index 19247a8f..be8f776a 100644
--- a/common-session.c
+++ b/common-session.c
@@ -281,6 +281,8 @@ void session_cleanup() {
 	other session state is freed. */
 	remove_all_listeners();
 
+	remove_connect_pending();
+
 	while (!isempty(&ses.writequeue)) {
 		buf_free(dequeue(&ses.writequeue));
 	}
diff --git a/netio.c b/netio.c
index 9aa7ae51..42d1b32d 100644
--- a/netio.c
+++ b/netio.c
@@ -177,6 +177,13 @@ struct dropbear_progress_connection *connect_remote(const char* remotehost, cons
 	return c;
 }
 
+void remove_connect_pending() {
+	while (ses.conn_pending.first) {
+		struct dropbear_progress_connection *c = ses.conn_pending.first->item;
+		remove_connect(c, ses.conn_pending.first);
+	}
+}
+
 
 void set_connect_fds(fd_set *writefd) {
 	m_list_elem *iter;
diff --git a/netio.h b/netio.h
index 280ccaf5..1bf08ce6 100644
--- a/netio.h
+++ b/netio.h
@@ -30,8 +30,12 @@ typedef void(*connect_callback)(int result, int sock, void* data, const char* er
 struct dropbear_progress_connection * connect_remote (const char* remotehost, const char* remoteport,
 	connect_callback cb, void *cb_data);
 
+/* Sets up for select() */
 void set_connect_fds(fd_set *writefd);
+/* Handles ready sockets after select() */
 void handle_connect_fds(fd_set *writefd);
+/* Cleanup */
+void remove_connect_pending();
 
 /* Doesn't actually stop the connect, but adds a dummy callback instead */
 void cancel_connect(struct dropbear_progress_connection *c);
-- 
GitLab