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