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/net.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/net.c')
-rw-r--r-- | src/server/net.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/server/net.c b/src/server/net.c index 963d3ea..b351ed3 100644 --- a/src/server/net.c +++ b/src/server/net.c @@ -32,6 +32,7 @@ #include <arpa/inet.h> #include <netinet/tcp.h> +#include "helper.h" #include "server.h" #include "saveload.h" #include "memlog.h" @@ -223,6 +224,7 @@ void *dnbd3_handle_query(void *dnbd3_client) } } + // client handling mainloop if (image) while (recv_request_header(client->sock, &request)) { switch (request.cmd) @@ -393,6 +395,21 @@ void *dnbd3_handle_query(void *dnbd3_client) } + // Check for messages that have been queued from another thread + while (client->sendqueue != NULL) + { + dnbd3_binstring_t *message = NULL; + pthread_spin_lock(&_spinlock); + if (client->sendqueue != NULL) + { + message = client->sendqueue->data; + client->sendqueue = g_slist_remove(client->sendqueue, message); + } + pthread_spin_unlock(&_spinlock); + send_data(client->sock, message->data, message->len); + free(message); + } + } pthread_spin_lock(&_spinlock); _dnbd3_clients = g_slist_remove(_dnbd3_clients, client); @@ -401,7 +418,7 @@ void *dnbd3_handle_query(void *dnbd3_client) close(client->sock); if (image_file != -1) close(image_file); if (image_cache != -1) close(image_cache); - g_free(client); + dnbd3_free_client(client); pthread_exit((void *) 0); } |