diff options
author | Simon Rettberg | 2013-09-17 15:44:50 +0200 |
---|---|---|
committer | Simon Rettberg | 2013-09-17 15:44:50 +0200 |
commit | 0228f3c86fefa582ec77b6aa97e89363b0f9b329 (patch) | |
tree | 06ab97b80477b043512afeb919e50f6675968d92 /src/server/image.c | |
parent | [SERVER] Fix generation of alt-server list for client (diff) | |
download | dnbd3-0228f3c86fefa582ec77b6aa97e89363b0f9b329.tar.gz dnbd3-0228f3c86fefa582ec77b6aa97e89363b0f9b329.tar.xz dnbd3-0228f3c86fefa582ec77b6aa97e89363b0f9b329.zip |
[SERVER] Properly decrease uplink.queueLen when removing a client
Diffstat (limited to 'src/server/image.c')
-rw-r--r-- | src/server/image.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/server/image.c b/src/server/image.c index 13e2e5b..a7cc427 100644 --- a/src/server/image.c +++ b/src/server/image.c @@ -1029,7 +1029,7 @@ int image_generateCrcFile(char *image) void image_printAll() { - int i, percent, pending; + int i, percent, pending, j; char buffer[100] = { 0 }; spin_lock( &_images_lock ); for (i = 0; i < _num_images; ++i) { @@ -1040,7 +1040,12 @@ void image_printAll() printf( " Complete: %d%%\n", percent ); if ( _images[i]->uplink != NULL ) { host_to_string( &_images[i]->uplink->currentServer, buffer, sizeof(buffer) ); - pending = _images[i]->uplink->queueLen; + pending = 0; + spin_lock( &_images[i]->uplink->queueLock ); + for (j = 0; j < _images[i]->uplink->queueLen; ++j) { + if ( _images[i]->uplink->queue[j].status != ULR_FREE ) pending++; + } + spin_unlock( &_images[i]->uplink->queueLock ); printf( " Uplink: %s -- %d pending requests\n", buffer, pending ); } printf( " Users: %d\n", _images[i]->users ); |