summaryrefslogtreecommitdiffstats
path: root/src/server/net.c
diff options
context:
space:
mode:
authorSimon Rettberg2019-08-22 16:14:27 +0200
committerSimon Rettberg2019-08-22 16:14:27 +0200
commit5fb4ef278be86fb6bda487f65ec4855d830bf4e5 (patch)
treef06c1ce5466b14bb4ff47dbd2939e11b8eedf6d0 /src/server/net.c
parent[SERVER] Put request handle into CMD_ERROR reply (diff)
downloaddnbd3-5fb4ef278be86fb6bda487f65ec4855d830bf4e5.tar.gz
dnbd3-5fb4ef278be86fb6bda487f65ec4855d830bf4e5.tar.xz
dnbd3-5fb4ef278be86fb6bda487f65ec4855d830bf4e5.zip
[SERVER] Get rid of alt-servers thread, per-uplink rtt history
Alt-Server checks are now run using the threadpool, so we don't need a queue and dedicated thread anymore. The rtt history is now kept per uplink, so many uplinks won't overwhelm the history, making its time window very short. Also the fail counter is now split up; a global one for when the server actually isn't reachable, a local (per-uplink) one for when the server is reachable but doesn't serve the requested image.
Diffstat (limited to 'src/server/net.c')
-rw-r--r--src/server/net.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/server/net.c b/src/server/net.c
index 7f3c1ce..4976eea 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -669,11 +669,19 @@ static void removeFromList(dnbd3_client_t *client)
{
int i;
mutex_lock( &_clients_lock );
- for ( i = _num_clients - 1; i >= 0; --i ) {
- if ( _clients[i] == client ) {
- _clients[i] = NULL;
+ if ( _num_clients != 0 ) {
+ for ( i = _num_clients - 1; i >= 0; --i ) {
+ if ( _clients[i] == client ) {
+ _clients[i] = NULL;
+ break;
+ }
+ }
+ if ( i != 0 && i + 1 == _num_clients ) {
+ do {
+ i--;
+ } while ( _clients[i] == NULL && i > 0 );
+ _num_clients = i + 1;
}
- if ( _clients[i] == NULL && i + 1 == _num_clients ) --_num_clients;
}
mutex_unlock( &_clients_lock );
}