diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/Makefile.in | 1 | ||||
-rw-r--r-- | source3/include/proto.h | 6 | ||||
-rw-r--r-- | source3/lib/server_contexts.c | 69 | ||||
-rw-r--r-- | source3/smbd/globals.c | 17 | ||||
-rw-r--r-- | source3/smbd/server.c | 13 | ||||
-rw-r--r-- | source3/smbd/server_exit.c | 4 |
6 files changed, 80 insertions, 30 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index 8e2c0037e5..6445278896 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -406,6 +406,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ) $(CRYPTO_OBJ) \ lib/conn_tdb.o lib/adt_tree.o lib/gencache.o \ lib/sessionid_tdb.o \ lib/module.o lib/events.o @LIBTEVENT_OBJ0@ \ + lib/server_contexts.o \ lib/ldap_escape.o @CHARSET_STATIC@ \ lib/secdesc.o lib/util_seaccess.o ../libcli/security/secace.o \ ../libcli/security/sddl.o \ diff --git a/source3/include/proto.h b/source3/include/proto.h index e6aec3a6e4..9ae640762f 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -6247,6 +6247,12 @@ void set_root_sec_ctx(void); bool pop_sec_ctx(void); void init_sec_ctx(void); +/* The following definitions come from lib/server_contexts.c */ +struct tevent_context *server_event_context(void); +void server_event_context_free(void); +struct messaging_context *server_messaging_context(void); +void server_messaging_context_free(void); + /* The following definitions come from smbd/server.c */ int smbd_server_fd(void); diff --git a/source3/lib/server_contexts.c b/source3/lib/server_contexts.c new file mode 100644 index 0000000000..5e48b7986d --- /dev/null +++ b/source3/lib/server_contexts.c @@ -0,0 +1,69 @@ +/* + Unix SMB/CIFS implementation. + Common server globals + + Copyright (C) Simo Sorce <idra@samba.org> 2010 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" + +struct tevent_context *server_event_ctx = NULL; + +struct tevent_context *server_event_context(void) +{ + if (!server_event_ctx) { + /* + * Note we MUST use the NULL context here, not the + * autofree context, to avoid side effects in forked + * children exiting. + */ + server_event_ctx = s3_tevent_context_init(NULL); + } + if (!server_event_ctx) { + smb_panic("Could not init server's event context"); + } + return server_event_ctx; +} + +void server_event_context_free(void) +{ + TALLOC_FREE(server_event_ctx); +} + +struct messaging_context *server_msg_ctx = NULL; + +struct messaging_context *server_messaging_context(void) +{ + if (server_msg_ctx == NULL) { + /* + * Note we MUST use the NULL context here, not the + * autofree context, to avoid side effects in forked + * children exiting. + */ + server_msg_ctx = messaging_init(NULL, + procid_self(), + server_event_context()); + } + if (server_msg_ctx == NULL) { + DEBUG(0, ("Could not init server's messaging context.\n")); + } + return server_msg_ctx; +} + +void server_messaging_context_free(void) +{ + TALLOC_FREE(server_msg_ctx); +} diff --git a/source3/smbd/globals.c b/source3/smbd/globals.c index 3150b9f67f..5df835d1aa 100644 --- a/source3/smbd/globals.c +++ b/source3/smbd/globals.c @@ -113,8 +113,6 @@ struct kernel_oplocks *koplocks = NULL; int am_parent = 1; int server_fd = -1; -struct event_context *smbd_event_ctx = NULL; -struct messaging_context *smbd_msg_ctx = NULL; struct memcache *smbd_memcache_ctx = NULL; bool exit_firsttime = true; struct child_pid *children = 0; @@ -124,20 +122,7 @@ struct smbd_server_connection *smbd_server_conn = NULL; struct messaging_context *smbd_messaging_context(void) { - if (smbd_msg_ctx == NULL) { - /* - * Note we MUST use the NULL context here, not the - * autofree context, to avoid side effects in forked - * children exiting. - */ - smbd_msg_ctx = messaging_init(NULL, - procid_self(), - smbd_event_context()); - } - if (smbd_msg_ctx == NULL) { - DEBUG(0, ("Could not init smbd messaging context.\n")); - } - return smbd_msg_ctx; + return server_messaging_context(); } struct memcache *smbd_memcache(void) diff --git a/source3/smbd/server.c b/source3/smbd/server.c index a7297d6863..2bb0bb87fe 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -49,18 +49,7 @@ int get_client_fd(void) struct event_context *smbd_event_context(void) { - if (!smbd_event_ctx) { - /* - * Note we MUST use the NULL context here, not the - * autofree context, to avoid side effects in forked - * children exiting. - */ - smbd_event_ctx = event_context_init(NULL); - } - if (!smbd_event_ctx) { - smb_panic("Could not init smbd event context"); - } - return smbd_event_ctx; + return server_event_context(); } /******************************************************************* diff --git a/source3/smbd/server_exit.c b/source3/smbd/server_exit.c index 3e0da3e1cf..1de9a0989c 100644 --- a/source3/smbd/server_exit.c +++ b/source3/smbd/server_exit.c @@ -119,8 +119,8 @@ static void exit_server_common(enum server_exit_reason how, */ sconn = NULL; TALLOC_FREE(smbd_server_conn); - TALLOC_FREE(smbd_msg_ctx); - TALLOC_FREE(smbd_event_ctx); + server_messaging_context_free(); + server_event_context_free(); TALLOC_FREE(smbd_memcache_ctx); if (how != SERVER_EXIT_NORMAL) { |