summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/kdc/kdc-heimdal.c2
-rw-r--r--source4/smbd/process_prefork.c11
-rw-r--r--source4/smbd/process_single.c3
-rw-r--r--source4/smbd/process_standard.c3
-rw-r--r--source4/smbd/service.h10
5 files changed, 21 insertions, 8 deletions
diff --git a/source4/kdc/kdc-heimdal.c b/source4/kdc/kdc-heimdal.c
index 407de92054e..67c07c3d81a 100644
--- a/source4/kdc/kdc-heimdal.c
+++ b/source4/kdc/kdc-heimdal.c
@@ -316,7 +316,7 @@ static NTSTATUS kdc_task_init(struct task_server *task)
/*
initialise the kdc task after a fork
*/
-static void kdc_post_fork(struct task_server *task)
+static void kdc_post_fork(struct task_server *task, struct process_details *pd)
{
struct kdc_server *kdc;
krb5_kdc_configuration *kdc_config = NULL;
diff --git a/source4/smbd/process_prefork.c b/source4/smbd/process_prefork.c
index 788aa976390..016385c762c 100644
--- a/source4/smbd/process_prefork.c
+++ b/source4/smbd/process_prefork.c
@@ -240,6 +240,7 @@ static void prefork_new_task(
struct tevent_context *ev2;
struct task_server *task = NULL;
+ struct process_details pd = initial_process_details;
t = tfork_create();
if (t == NULL) {
@@ -284,7 +285,7 @@ static void prefork_new_task(
* The task does not support pre-fork
*/
if (task != NULL && service_details->post_fork != NULL) {
- service_details->post_fork(task);
+ service_details->post_fork(task, &pd);
}
tevent_loop_wait(ev);
TALLOC_FREE(ev);
@@ -348,6 +349,7 @@ static void prefork_new_task(
"after fork");
}
tevent_fd_set_auto_close(fde);
+ pd.instances++;
} else {
/*
* tfork uses malloc
@@ -355,12 +357,13 @@ static void prefork_new_task(
free(w);
TALLOC_FREE(ev);
- setproctitle("task[%s] pre-forked worker",
- service_name);
+ setproctitle("task[%s] pre-forked worker(%d)",
+ service_name,
+ pd.instances);
prefork_reload_after_fork();
setup_handlers(ev2, from_parent_fd);
if (service_details->post_fork != NULL) {
- service_details->post_fork(task);
+ service_details->post_fork(task, &pd);
}
tevent_loop_wait(ev2);
talloc_free(ev2);
diff --git a/source4/smbd/process_single.c b/source4/smbd/process_single.c
index 242622b3b8f..174c1572812 100644
--- a/source4/smbd/process_single.c
+++ b/source4/smbd/process_single.c
@@ -114,7 +114,8 @@ static void single_new_task(struct tevent_context *ev,
*/
task = new_task(ev, lp_ctx, cluster_id(pid, taskid++), private_data, NULL);
if (task != NULL && service_details->post_fork != NULL) {
- service_details->post_fork(task);
+ struct process_details pd = initial_process_details;
+ service_details->post_fork(task, &pd);
}
}
diff --git a/source4/smbd/process_standard.c b/source4/smbd/process_standard.c
index 62620096af5..91dfa9753c5 100644
--- a/source4/smbd/process_standard.c
+++ b/source4/smbd/process_standard.c
@@ -494,7 +494,8 @@ static void standard_new_task(struct tevent_context *ev,
* is forked in standard_accept_connection.
*/
if (task != NULL && service_details->post_fork != NULL) {
- service_details->post_fork(task);
+ struct process_details pd = initial_process_details;
+ service_details->post_fork(task, &pd);
}
diff --git a/source4/smbd/service.h b/source4/smbd/service.h
index 467cb34f6ca..0b6f937b63c 100644
--- a/source4/smbd/service.h
+++ b/source4/smbd/service.h
@@ -27,6 +27,14 @@
#include "smbd/service_stream.h"
#include "smbd/service_task.h"
+struct process_details {
+ unsigned int instances;
+};
+
+static const struct process_details initial_process_details = {
+ .instances = 0
+};
+
struct service_details {
/*
* Prevent the standard process model from forking a new worker
@@ -64,7 +72,7 @@ struct service_details {
* process is forked on a new connection. It is instead called
* immediately after the task_init.
*/
- void (*post_fork) (struct task_server *);
+ void (*post_fork) (struct task_server *, struct process_details *);
};
#include "smbd/service_proto.h"