From fce8bd553fbaed00c1a97769fe1bfa1ffa45f8ac Mon Sep 17 00:00:00 2001
From: Armin Luntzer <armin.luntzer@univie.ac.at>
Date: Tue, 4 Jun 2019 08:28:35 +0000
Subject: [PATCH] server net: more connection cleanup safguards

---
 src/server/net.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/server/net.c b/src/server/net.c
index 3e5719e..c1b09ac 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -192,6 +192,12 @@ static void drop_con_begin(struct con_data *c)
 
 	gchar *str;
 
+	if (!c->con)
+		return;
+
+	if (!G_IS_OBJECT(c->con))
+		return;
+
 	g_mutex_lock(&listlock);
 
 	str = net_get_host_string(c->con);
@@ -246,13 +252,19 @@ static void drop_con_finalize(struct con_data *c)
 	net_server_broadcast_message(buf, NULL);
 	net_push_userlist_cb(NULL);
 
-	g_object_unref(c->istream);
-	g_object_unref(c->ca);
+	if (G_IS_OBJECT(c->istream))
+		g_object_unref(c->istream);
+
+	if (G_IS_OBJECT(c->ca))
+		g_object_unref(c->ca);
 
 	g_free(c->nick);
+	c->nick = NULL;
+
 	g_free(buf);
 	g_free(c);
 
+
 exit:
 	g_mutex_unlock(&listlock);
 }
@@ -292,7 +304,9 @@ static void do_send(gpointer data, gpointer user_data)
 		c->kick = TRUE;
 
 	g_mutex_unlock(&c->lock);
-	g_object_unref(c->con);
+
+	if (G_IS_OBJECT(c->con))
+		g_object_unref(c->con);
 
 exit:
 	/* if this was the last reference, call finalize */
-- 
GitLab