summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2013-08-13 17:04:18 +0200
committerSimon Rettberg2013-08-13 17:04:18 +0200
commitc25838a76eacef9a08ae4bca3762d1d328f2b882 (patch)
treec16c17babd40c0c5b96b87c57ff6bd735e9a952a
parent[SERVER] Fix race condition in uplink request aggregation, other small improv... (diff)
downloaddnbd3-c25838a76eacef9a08ae4bca3762d1d328f2b882.tar.gz
dnbd3-c25838a76eacef9a08ae4bca3762d1d328f2b882.tar.xz
dnbd3-c25838a76eacef9a08ae4bca3762d1d328f2b882.zip
Test your coke, dork!
-rw-r--r--src/server/altservers.c9
-rw-r--r--src/server/integrity.c1
-rw-r--r--src/server/server.c2
-rw-r--r--src/server/uplink.c4
4 files changed, 9 insertions, 7 deletions
diff --git a/src/server/altservers.c b/src/server/altservers.c
index 86b2dce..a98bedc 100644
--- a/src/server/altservers.c
+++ b/src/server/altservers.c
@@ -420,9 +420,12 @@ static void *altserver_main(void *data)
if ( send( sock, &request, sizeof(request), 0 ) != sizeof(request) ) ERROR_GOTO_VA( server_failed,
"[ERROR] Could not request random block for %s", uplink->image->lower_name );
// See if requesting the block succeeded ++++++++++++++++++++++
- if ( recv( sock, &reply, sizeof(reply), MSG_WAITALL ) != sizeof(reply) ) {
- ERROR_GOTO_VA( server_failed, "[ERROR] Received corrupted reply header after CMD_GET_BLOCK (%s)",
- uplink->image->lower_name );
+ const int retlen = recv( sock, &reply, sizeof(reply), MSG_WAITALL );
+ if ( retlen != sizeof(reply) ) {
+ char buf[100] = { 0 };
+ host_to_string( &servers[itAlt], buf, 100 );
+ ERROR_GOTO_VA( server_failed, "[ERROR] Received corrupted reply header (%d, %s) after CMD_GET_BLOCK (%s)",
+ retlen, buf, uplink->image->lower_name );
}
// check reply header
fixup_reply( reply );
diff --git a/src/server/integrity.c b/src/server/integrity.c
index 400e171..a6d4ee5 100644
--- a/src/server/integrity.c
+++ b/src/server/integrity.c
@@ -4,6 +4,7 @@
#include "image.h"
#include "globals.h"
#include "memlog.h"
+#include "helper.h"
#include <pthread.h>
#include <stdlib.h>
diff --git a/src/server/server.c b/src/server/server.c
index 289b901..d2238cc 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -312,8 +312,6 @@ int main(int argc, char *argv[])
memlogf( "[INFO] Server is ready..." );
- setThreadName( "client-listener" );
-
// +++++++++++++++++++++++++++++++++++++++++++++++++++ main loop
while ( 1 ) {
len = sizeof(client);
diff --git a/src/server/uplink.c b/src/server/uplink.c
index 13ae7ad..a4fccf9 100644
--- a/src/server/uplink.c
+++ b/src/server/uplink.c
@@ -138,13 +138,13 @@ int uplink_request(dnbd3_client_t *client, uint64_t handle, uint64_t start, uint
uplink->queue[freeSlot].to = end;
uplink->queue[freeSlot].handle = handle;
uplink->queue[freeSlot].client = client;
- uplink->queue[freeSlot].status = (foundExisting ? ULR_PENDING : ULR_NEW);
+ uplink->queue[freeSlot].status = (foundExisting == -1 ? ULR_NEW : ULR_PENDING);
#ifdef _DEBUG
uplink->queue[freeSlot].entered = time( NULL );
#endif
spin_unlock( &uplink->queueLock );
- if ( !foundExisting ) {
+ if ( foundExisting == -1 ) {
static uint64_t counter = 1;
write( uplink->signal, &counter, sizeof(uint64_t) );
}