diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2004-11-06 23:23:15 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:05:36 -0500 |
commit | 71db46ea665606384f2be1be708c74c97c9adfb2 (patch) | |
tree | 24c84e12f4fc925f3ec1e69348493d7222df1e44 /source4/smbd | |
parent | b012ab557b8f8a2f58dfbbe8b7818f3e6d8cf38f (diff) | |
download | samba-71db46ea665606384f2be1be708c74c97c9adfb2.tar.gz samba-71db46ea665606384f2be1be708c74c97c9adfb2.tar.bz2 samba-71db46ea665606384f2be1be708c74c97c9adfb2.zip |
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)
Diffstat (limited to 'source4/smbd')
-rw-r--r-- | source4/smbd/config.mk | 5 | ||||
-rw-r--r-- | source4/smbd/process_model.c | 9 | ||||
-rw-r--r-- | source4/smbd/process_model.mk | 6 | ||||
-rw-r--r-- | source4/smbd/rewrite.c | 21 | ||||
-rw-r--r-- | source4/smbd/service.c | 9 |
5 files changed, 19 insertions, 31 deletions
diff --git a/source4/smbd/config.mk b/source4/smbd/config.mk index 55f040f805..7c5fe74da9 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 3493425774..69e321e0c2 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 6a4048700f..d4329e2014 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 0e9260535c..d22e3c28c3 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 767d310e2b..fdbd5d0c80 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; } |