summaryrefslogtreecommitdiff
path: root/source3/lib
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2011-08-16 11:09:20 -0400
committerSimo Sorce <idra@samba.org>2011-08-21 09:05:05 -0400
commit308e4e0126b7841e23a6135f884ba761eaacb58a (patch)
tree0b68a8025e24231736324274a445c7ad5bfb44ff /source3/lib
parentdf6f320aa47026bbf589a3276a0708ea3f93504b (diff)
downloadsamba-308e4e0126b7841e23a6135f884ba761eaacb58a.tar.gz
samba-308e4e0126b7841e23a6135f884ba761eaacb58a.tar.bz2
samba-308e4e0126b7841e23a6135f884ba761eaacb58a.zip
s3-prefork: add a few more utility functions
Add a few util functions children side so that daemons do not have to care about properly setting num_clients and state. Let a common helper do it so that they are all consistent. Signed-off-by: Andreas Schneider <asn@samba.org> Signed-off-by: Simo Sorce <idra@samba.org>
Diffstat (limited to 'source3/lib')
-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_ */