silcd: increment stat.clients statistics whenever adding new client
[silc.git] / apps / silcd / server_util.c
index 74ce18ba2902866107148517f3f961fe645dd714..7df4088519be616818d3724b429018df9fcb8a0f 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2008 Pekka Riikonen
+  Copyright (C) 1997 - 2009 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -42,8 +42,8 @@ silc_server_remove_clients_channels(SilcServer server,
   if (!client)
     return;
 
-  SILC_LOG_DEBUG(("Remove client %s from all channels",
-                client->nickname ? client->nickname :
+  SILC_LOG_DEBUG(("Remove client %p %s from all channels",
+                 client, client->nickname ? client->nickname :
                  (unsigned char *)""));
 
   if (silc_hash_table_find(clients, client, NULL, NULL))
@@ -119,7 +119,7 @@ silc_server_remove_clients_channels(SilcServer server,
       silc_hash_table_add(channels, channel, channel);
   }
   silc_hash_table_list_reset(&htl);
-  assert(!silc_hash_table_count(client->channels));
+  SILC_VERIFY(!silc_hash_table_count(client->channels));
 }
 
 /* This function removes all client entries that are originated from
@@ -205,6 +205,9 @@ SilcBool silc_server_remove_clients_by_server(SilcServer server,
       }
 
       /* Update statistics */
+      SILC_LOG_DEBUG(("stat.clients %d->%d", server->stat.clients,
+                     server->stat.clients - 1));
+      SILC_VERIFY(server->stat.clients > 0);
       server->stat.clients--;
       if (server->stat.cell_clients)
        server->stat.cell_clients--;
@@ -268,6 +271,9 @@ SilcBool silc_server_remove_clients_by_server(SilcServer server,
       }
 
       /* Update statistics */
+      SILC_LOG_DEBUG(("stat.clients %d->%d", server->stat.clients,
+                     server->stat.clients - 1));
+      SILC_VERIFY(server->stat.clients > 0);
       server->stat.clients--;
       if (server->stat.cell_clients)
        server->stat.cell_clients--;
@@ -1560,6 +1566,9 @@ void silc_server_kill_client(SilcServer server,
     }
   } else {
     /* Update statistics */
+    SILC_LOG_DEBUG(("stat.clients %d->%d", server->stat.clients,
+                   server->stat.clients - 1));
+    SILC_VERIFY(server->stat.clients > 0);
     server->stat.clients--;
     if (server->stat.cell_clients)
       server->stat.cell_clients--;
@@ -1574,7 +1583,8 @@ void silc_server_kill_client(SilcServer server,
     }
 
     if (SILC_IS_LOCAL(remote_client)) {
-      server->stat.my_clients--;
+      if (!remote_client->local_detached)
+        server->stat.my_clients--;
       silc_schedule_task_del_by_context(server->schedule, remote_client);
     }
 
@@ -2018,6 +2028,8 @@ void silc_server_inviteban_destruct(void *key, void *context,
 
 void silc_server_create_connections(SilcServer server)
 {
+  silc_schedule_task_del_by_callback(server->schedule,
+                                    silc_server_connect_to_router_retry);
   silc_schedule_task_del_by_callback(server->schedule,
                                     silc_server_connect_to_router);
   silc_schedule_task_add_timeout(server->schedule,