summaryrefslogtreecommitdiff
path: root/source3/lib/server_prefork.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/lib/server_prefork.c')
-rw-r--r--source3/lib/server_prefork.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/source3/lib/server_prefork.c b/source3/lib/server_prefork.c
index a584df7a71..2df6adea9f 100644
--- a/source3/lib/server_prefork.c
+++ b/source3/lib/server_prefork.c
@@ -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;
@@ -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;