summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/server_prefork_util.c23
-rw-r--r--source3/lib/server_prefork_util.h3
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_ */