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