From 71db46ea665606384f2be1be708c74c97c9adfb2 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 6 Nov 2004 23:23:15 +0000 Subject: r3586: Fix some of the issues with the module init functions. Both subsystems and modules can now have init functions, which can be specified in .mk files (INIT_FUNCTION = ...) The build system will define : - SUBSYSTEM_init_static_modules that calls the init functions of all statically compiled modules. Failing to load will generate an error which is not fatal - BINARY_init_subsystems that calls the init functions (if defined) for the subsystems the binary depends on This removes the hack with the "static bool Initialised = " and the "lazy_init" functions (This used to be commit 7a8244761bfdfdfb48f8264d76951ebdfbf7bd8a) --- source4/smbd/config.mk | 5 +++++ source4/smbd/process_model.c | 9 ++++----- source4/smbd/process_model.mk | 6 +++++- source4/smbd/rewrite.c | 21 +-------------------- source4/smbd/service.c | 9 ++++----- 5 files changed, 19 insertions(+), 31 deletions(-) (limited to 'source4/smbd') diff --git a/source4/smbd/config.mk b/source4/smbd/config.mk index 55f040f8050..7c5fe74da96 100644 --- a/source4/smbd/config.mk +++ b/source4/smbd/config.mk @@ -3,6 +3,7 @@ ################################################ # Start MODULE server_service_auth [MODULE::server_service_auth] +INIT_FUNCTION = server_service_auth_init REQUIRED_SUBSYSTEMS = \ AUTH # End MODULE server_auth @@ -11,6 +12,7 @@ REQUIRED_SUBSYSTEMS = \ ################################################ # Start MODULE server_service_smb [MODULE::server_service_smb] +INIT_FUNCTION = server_service_smb_init REQUIRED_SUBSYSTEMS = \ SMB # End MODULE server_smb @@ -19,6 +21,7 @@ REQUIRED_SUBSYSTEMS = \ ################################################ # Start MODULE server_service_rpc [MODULE::server_service_rpc] +INIT_FUNCTION = server_service_rpc_init REQUIRED_SUBSYSTEMS = \ DCERPC # End MODULE server_rpc @@ -27,6 +30,7 @@ REQUIRED_SUBSYSTEMS = \ ################################################ # Start MODULE server_service_ldap [MODULE::server_service_ldap] +INIT_FUNCTION = server_service_ldap_init REQUIRED_SUBSYSTEMS = \ LDAP # End MODULE server_ldap @@ -35,6 +39,7 @@ REQUIRED_SUBSYSTEMS = \ ####################### # Start SUBSYSTEM SERVICE [SUBSYSTEM::SERVER_SERVICE] +INIT_FUNCTION = server_service_init INIT_OBJ_FILES = \ smbd/service.o REQUIRED_SUBSYSTEMS = \ diff --git a/source4/smbd/process_model.c b/source4/smbd/process_model.c index 34934257749..69e321e0c2d 100644 --- a/source4/smbd/process_model.c +++ b/source4/smbd/process_model.c @@ -118,18 +118,17 @@ const struct process_model_critical_sizes *process_model_version(void) /* initialise the PROCESS_MODEL subsystem */ -BOOL process_model_init(void) +NTSTATUS process_model_init(void) { NTSTATUS status; status = register_subsystem("process_model", register_process_model); if (!NT_STATUS_IS_OK(status)) { - return False; + return status; } - /* FIXME: Perhaps panic if a basic process model, such as simple, fails to initialise? */ - static_init_process_model; + process_model_init_static_modules; DEBUG(3,("PROCESS subsystem version %d initialised\n", PROCESS_MODEL_VERSION)); - return True; + return NT_STATUS_OK; } diff --git a/source4/smbd/process_model.mk b/source4/smbd/process_model.mk index 6a4048700fd..d4329e20145 100644 --- a/source4/smbd/process_model.mk +++ b/source4/smbd/process_model.mk @@ -3,6 +3,7 @@ ################################################ # Start MODULE process_model_single [MODULE::process_model_single] +INIT_FUNCTION = process_model_single_init INIT_OBJ_FILES = \ smbd/process_single.o # End MODULE process_model_single @@ -11,6 +12,7 @@ INIT_OBJ_FILES = \ ################################################ # Start MODULE process_model_standard [MODULE::process_model_standard] +INIT_FUNCTION = process_model_standard_init INIT_OBJ_FILES = \ smbd/process_standard.o # End MODULE process_model_standard @@ -19,6 +21,7 @@ INIT_OBJ_FILES = \ ################################################ # Start MODULE process_model_thread [MODULE::process_model_thread] +INIT_FUNCTION = process_model_thread_init INIT_OBJ_FILES = \ smbd/process_thread.o REQUIRED_LIBRARIES = \ @@ -29,8 +32,9 @@ REQUIRED_LIBRARIES = \ ################################################ # Start SUBSYSTEM PROCESS_MODEL [SUBSYSTEM::PROCESS_MODEL] +INIT_FUNCTION = process_model_init INIT_OBJ_FILES = \ smbd/process_model.o # # End SUBSYSTEM PROCESS_MODEL -################################################ \ No newline at end of file +################################################ diff --git a/source4/smbd/rewrite.c b/source4/smbd/rewrite.c index 0e9260535cc..d22e3c28c34 100644 --- a/source4/smbd/rewrite.c +++ b/source4/smbd/rewrite.c @@ -41,26 +41,7 @@ void init_subsystems(void) exit(1); } - /* Setup the PROCESS_MODEL subsystem */ - if (!process_model_init()) - exit(1); - - /* Setup the SERVER_SERVICE subsystem */ - if (!server_service_init()) - exit(1); - - /* Setup the AUTH subsystem */ - if (!auth_init()) - exit(1); - - /* Setup the NTVFS subsystem */ - if (!ntvfs_init()) - exit(1); - - /* Setup the DCERPC subsystem */ - if (!subsystem_dcerpc_init()) - exit(1); - + smbd_init_subsystems; } /**************************************************************************** diff --git a/source4/smbd/service.c b/source4/smbd/service.c index 767d310e2bf..fdbd5d0c801 100644 --- a/source4/smbd/service.c +++ b/source4/smbd/service.c @@ -321,20 +321,19 @@ static NTSTATUS register_server_service_ops(const void *_ops) /* initialise the SERVER SERVICE subsystem */ -BOOL server_service_init(void) +NTSTATUS server_service_init(void) { NTSTATUS status; status = register_subsystem("service", register_server_service_ops); if (!NT_STATUS_IS_OK(status)) { - return False; + return status; } - /* FIXME: Perhaps panic if a basic endpoint server, such as EPMAPER, fails to initialise? */ - static_init_server_service; + server_service_init_static_modules; DEBUG(3,("SERVER SERVICE subsystem version %d initialised\n", SERVER_SERVICE_VERSION)); - return True; + return NT_STATUS_OK; } -- cgit