diff options
-rw-r--r-- | source3/lib/server_prefork_util.c | 23 | ||||
-rw-r--r-- | source3/lib/server_prefork_util.h | 3 |
2 files changed, 26 insertions, 0 deletions
diff --git a/source3/lib/server_prefork_util.c b/source3/lib/server_prefork_util.c index 6b1e249335..8d7d0d2bb5 100644 --- a/source3/lib/server_prefork_util.c +++ b/source3/lib/server_prefork_util.c @@ -115,3 +115,26 @@ void pfh_manage_pool(struct tevent_context *ev_ctx, DEBUG(10, ("Stats: children: %d, allowed connections: %d\n", total, prefork_count_allowed_connections(pool))); } + +void pfh_client_terminated(struct pf_worker_data *pf) +{ + if (pf->num_clients >= 0) { + pf->num_clients--; + } else { + if (pf->status != PF_WORKER_EXITING) { + DEBUG(1, ("Invalid num clients, stopping!\n")); + } + pf->status = PF_WORKER_EXITING; + pf->num_clients = -1; + } +} + +bool pfh_child_allowed_to_accept(struct pf_worker_data *pf) +{ + if (pf->status == PF_WORKER_EXITING || + pf->status == PF_WORKER_ACCEPTING) { + return false; + } + + return (pf->num_clients < pf->allowed_clients); +} diff --git a/source3/lib/server_prefork_util.h b/source3/lib/server_prefork_util.h index 5715f06f4a..65e85dd350 100644 --- a/source3/lib/server_prefork_util.h +++ b/source3/lib/server_prefork_util.h @@ -46,4 +46,7 @@ void pfh_manage_pool(struct tevent_context *ev_ctx, struct pf_daemon_config *cfg, struct prefork_pool *pool); +void pfh_client_terminated(struct pf_worker_data *pf); +bool pfh_child_allowed_to_accept(struct pf_worker_data *pf); + #endif /* _SERVER_PREFORK_UTIL_H_ */ |