summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/Makefile.in1
-rw-r--r--source3/include/proto.h6
-rw-r--r--source3/lib/server_contexts.c69
-rw-r--r--source3/smbd/globals.c17
-rw-r--r--source3/smbd/server.c13
-rw-r--r--source3/smbd/server_exit.c4
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) {