diff options
author | sr | 2012-09-04 19:22:57 +0200 |
---|---|---|
committer | sr | 2012-09-04 19:22:57 +0200 |
commit | bc4e381484024237df0b04bb667f742fe4846b35 (patch) | |
tree | a28ee79b9999eb9c1436f0f7f6e7042537b413d2 /src/server/server.c | |
parent | [SERVER] Check which dnbd3 devices are idle and ready to use for proxy mode (diff) | |
download | dnbd3-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.c | 16 |
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); +} |