From d9bc89d4c00ab21270517b31af6227396f58ad27 Mon Sep 17 00:00:00 2001
From: Armin Luntzer <armin.luntzer@univie.ac.at>
Date: Thu, 13 Jun 2019 08:36:54 +0000
Subject: [PATCH] server net: improve cleanup, prevent double-free

---
 src/server/net.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/server/net.c b/src/server/net.c
index 3cba3cc..e215d79 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -253,13 +253,11 @@ static void drop_con_finalize(struct con_data *c)
 
 
 	g_mutex_lock(&finalize);
-	g_message("enter %s\n", __func__);
 
 	if (!c) {
 		g_warning("c is NULL");
 		goto unlock;
 	}
-
 	if (c->con) {
 		if (G_IS_OBJECT(c->con)) {
 			g_warning("c->con still holds references");
@@ -269,6 +267,7 @@ static void drop_con_finalize(struct con_data *c)
 
 	if (!c->nick) {
 		g_warning("double-free attempt");
+		goto unlock;
 	}
 
 	if (c->kick) {
@@ -289,19 +288,20 @@ static void drop_con_finalize(struct con_data *c)
 	net_push_userlist_cb(NULL);
 
 	if (G_IS_OBJECT(c->istream))
-		g_object_unref(c->istream);
+		g_clear_object(&c->istream);
 
 	if (G_IS_OBJECT(c->ca))
-		g_object_unref(c->ca);
+		g_clear_object(&c->ca);
 
-	g_free(c->nick);
-	c->nick = NULL;
+	if (c->nick) {
+		g_free(c->nick);
+		c->nick = NULL;
+	}
 
 	g_free(buf);
 	g_free(c);
 
 unlock:
-	g_message("leave %s\n", __func__);
 
 	g_mutex_unlock(&finalize);
 }
-- 
GitLab