From bc4e381484024237df0b04bb667f742fe4846b35 Mon Sep 17 00:00:00 2001 From: sr Date: Tue, 4 Sep 2012 19:22:57 +0200 Subject: [SERVER] More work towards automatic server discovery and querying --- src/server/server.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/server/server.c') diff --git a/src/server/server.c b/src/server/server.c index 4b30009..2b8828d 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -264,7 +264,7 @@ int main(int argc, char *argv[]) pthread_spin_lock(&_spinlock); _dnbd3_clients = g_slist_remove(_dnbd3_clients, dnbd3_client); pthread_spin_unlock(&_spinlock); - g_free(dnbd3_client); + dnbd3_free_client(dnbd3_client); close(fd); continue; } @@ -273,3 +273,17 @@ int main(int argc, char *argv[]) dnbd3_cleanup(); } + +/** + * Free the client struct recursively + */ +void dnbd3_free_client(dnbd3_client_t *client) +{ + GSList *it; // Doesn't lock, so call this function after removing the client from _dnbd3_clients + for (it = client->sendqueue; it; it = it->next) + { + free(it->data); + } + g_slist_free(client->sendqueue); + g_free(client); +} -- cgit v1.2.3-55-g7522