diff options
-rw-r--r-- | source4/kdc/kdc-heimdal.c | 2 | ||||
-rw-r--r-- | source4/smbd/process_prefork.c | 11 | ||||
-rw-r--r-- | source4/smbd/process_single.c | 3 | ||||
-rw-r--r-- | source4/smbd/process_standard.c | 3 | ||||
-rw-r--r-- | source4/smbd/service.h | 10 |
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" |