summaryrefslogtreecommitdiffstats
path: root/src/server/server.c
diff options
context:
space:
mode:
authorsr2013-07-25 22:00:10 +0200
committersr2013-07-25 22:00:10 +0200
commit706ef832d30d2797103d5a49e9e4f4ee0a509411 (patch)
tree7e5051374c9717017473a7397e8e233ee38868e1 /src/server/server.c
parentImplement CRC-32 list generation; fix quick CRC-32 check on image loading (diff)
downloaddnbd3-706ef832d30d2797103d5a49e9e4f4ee0a509411.tar.gz
dnbd3-706ef832d30d2797103d5a49e9e4f4ee0a509411.tar.xz
dnbd3-706ef832d30d2797103d5a49e9e4f4ee0a509411.zip
...Working on proxy mode...
Diffstat (limited to 'src/server/server.c')
-rw-r--r--src/server/server.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/server/server.c b/src/server/server.c
index d48bb25..575d9c4 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -323,10 +323,11 @@ void dnbd3_remove_client(dnbd3_client_t *client)
{
int i;
spin_lock( &_clients_lock );
+ const int cutoff = MAX(10, _num_clients / 2);
for (i = _num_clients - 1; i >= 0; --i) {
if ( _clients[i] != client ) continue;
_clients[i] = NULL;
- if ( i + 1 == _num_clients ) --_num_clients;
+ if ( i > cutoff && i + 1 == _num_clients ) --_num_clients;
}
spin_unlock( &_clients_lock );
}
@@ -334,7 +335,7 @@ void dnbd3_remove_client(dnbd3_client_t *client)
/**
* Free the client struct recursively.
* !! Make sure to call this function after removing the client from _dnbd3_clients !!
- * Locks on: _clients[].lock
+ * Locks on: _clients[].lock, might call function that locks on _images and _image[]
*/
dnbd3_client_t* dnbd3_free_client(dnbd3_client_t *client)
{