s3-prefork: Allow better management of allowed_clients
[idra/samba.git] / source3 / lib / server_prefork.c
index a584df7a711d41eed1a95563676f43de3441e125..2df6adea9f81ab6971df1941331121e6ba694950 100644 (file)
@@ -345,6 +345,23 @@ static void prefork_cleanup_loop(struct prefork_pool *pfp)
 
 }
 
 
 }
 
+int prefork_count_allowed_connections(struct prefork_pool *pfp)
+{
+       int c;
+       int i;
+
+       c = 0;
+       for (i = 0; i < pfp->pool_size; i++) {
+               if (pfp->pool[i].status == PF_WORKER_NONE) {
+                       continue;
+               }
+
+               c += pfp->pool[i].allowed_clients - pfp->pool[i].num_clients;
+       }
+
+       return c;
+}
+
 void prefork_increase_allowed_clients(struct prefork_pool *pfp, int max)
 {
        int i;
 void prefork_increase_allowed_clients(struct prefork_pool *pfp, int max)
 {
        int i;
@@ -360,6 +377,21 @@ void prefork_increase_allowed_clients(struct prefork_pool *pfp, int max)
        }
 }
 
        }
 }
 
+void prefork_decrease_allowed_clients(struct prefork_pool *pfp)
+{
+       int i;
+
+       for (i = 0; i < pfp->pool_size; i++) {
+               if (pfp->pool[i].status == PF_WORKER_NONE) {
+                       continue;
+               }
+
+               if (pfp->pool[i].allowed_clients > 1) {
+                       pfp->pool[i].allowed_clients--;
+               }
+       }
+}
+
 void prefork_reset_allowed_clients(struct prefork_pool *pfp)
 {
        int i;
 void prefork_reset_allowed_clients(struct prefork_pool *pfp)
 {
        int i;