Assert that the client count is positive prior to decrementing it.
authorkp@valhallalegends.com <kp@valhallalegends.com>
Fri, 4 Jul 2008 18:06:00 +0000 (13:06 -0500)
committerKp <kp@valhallalegends.com>
Sat, 8 Nov 2008 23:03:53 +0000 (18:03 -0500)
A situation has been observed where a silcd has clients connected to it,
but reports 0 local users.  It is believed that when these users log
off, the server underflows and refuses new connections.  Assert that no
underflow occurs, which should prove or disprove this theory.

apps/silcd/packet_receive.c
apps/silcd/server.c
apps/silcd/server_util.c
lib/silcserver/server_util.c

index 73424a68988fe7b2016030d9c8de39bb8f33b7a9..06e5bcd9161431a807f2b264523c292a9198875a 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "serverincludes.h"
 #include "server_internal.h"
+#include <assert.h>
 
 /* Received notify packet. Server can receive notify packets from router.
    Server then relays the notify messages to clients if needed. */
@@ -326,6 +327,7 @@ static void silc_server_notify_process(SilcServer server,
       tmp_len = 128;
 
     /* Update statistics */
+       assert(server->stat.clients > 0);
     server->stat.clients--;
     if (server->stat.cell_clients)
       server->stat.cell_clients--;
@@ -1245,6 +1247,7 @@ static void silc_server_notify_process(SilcServer server,
            }
 
            /* Update statistics */
+               assert(server->stat.clients > 0);
            server->stat.clients--;
            if (server->stat.cell_clients)
              server->stat.cell_clients--;
@@ -1490,6 +1493,7 @@ static void silc_server_notify_process(SilcServer server,
       }
 
       /* Update statistics */
+         assert(server->stat.clients > 0);
       server->stat.clients--;
       if (server->stat.cell_clients)
        server->stat.cell_clients--;
@@ -3733,6 +3737,7 @@ void silc_server_resume_client(SilcServer server,
 
     /* Delete this current client entry since we're resuming to old one. */
     server->stat.my_clients--;
+       assert(server->stat.clients > 0);
     server->stat.clients--;
     if (server->stat.cell_clients)
       server->stat.cell_clients--;
index 05deee4b61613878979e263954dff52bc3c73eee..5b655419693626fbce7bd382641c8292b2c52be4 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "serverincludes.h"
 #include "server_internal.h"
+#include <assert.h>
 
 /************************* Types and definitions ****************************/
 
@@ -3133,6 +3134,7 @@ void silc_server_free_client_data(SilcServer server,
 
   /* Update statistics */
   server->stat.my_clients--;
+  assert(server->stat.clients > 0);
   server->stat.clients--;
   if (server->stat.cell_clients)
     server->stat.cell_clients--;
index 74ce18ba2902866107148517f3f961fe645dd714..b3cff3685d1ee136a68a9c02c333e311a3cdb910 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "serverincludes.h"
 #include "server_internal.h"
+#include <assert.h>
 
 extern char *server_version;
 
@@ -205,6 +206,7 @@ SilcBool silc_server_remove_clients_by_server(SilcServer server,
       }
 
       /* Update statistics */
+         assert(server->stat.clients > 0);
       server->stat.clients--;
       if (server->stat.cell_clients)
        server->stat.cell_clients--;
@@ -268,6 +270,7 @@ SilcBool silc_server_remove_clients_by_server(SilcServer server,
       }
 
       /* Update statistics */
+         assert(server->stat.clients > 0);
       server->stat.clients--;
       if (server->stat.cell_clients)
        server->stat.cell_clients--;
@@ -1560,6 +1563,7 @@ void silc_server_kill_client(SilcServer server,
     }
   } else {
     /* Update statistics */
+       assert(server->stat.clients > 0);
     server->stat.clients--;
     if (server->stat.cell_clients)
       server->stat.cell_clients--;
index 6b5b38ebbfb7441dd2f0a37d4d718d241deac72f..ef85275c4a3725837e08d199e8fca5b7045bdf8d 100644 (file)
@@ -21,6 +21,7 @@
 #include "silc.h"
 #include "silcserver.h"
 #include "server_internal.h"
+#include <assert.h>
 
 /* Return next available command identifier. */