diff --git a/src/server/net.c b/src/server/net.c
index 3cba3cc556cd364d4093ef484e905a6c2850f5db..e215d797d6ab0522de936c8026c9882f2a90a9b9 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);
 }