summaryrefslogtreecommitdiffstats
path: root/src/server/server.c
diff options
context:
space:
mode:
authorsr2012-09-04 19:22:57 +0200
committersr2012-09-04 19:22:57 +0200
commitbc4e381484024237df0b04bb667f742fe4846b35 (patch)
treea28ee79b9999eb9c1436f0f7f6e7042537b413d2 /src/server/server.c
parent[SERVER] Check which dnbd3 devices are idle and ready to use for proxy mode (diff)
downloaddnbd3-bc4e381484024237df0b04bb667f742fe4846b35.tar.gz
dnbd3-bc4e381484024237df0b04bb667f742fe4846b35.tar.xz
dnbd3-bc4e381484024237df0b04bb667f742fe4846b35.zip
[SERVER] More work towards automatic server discovery and querying
Diffstat (limited to 'src/server/server.c')
-rw-r--r--src/server/server.c16
1 files changed, 15 insertions, 1 deletions
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);
+}