[SCM] Samba Shared Repository - branch v3-2-test updated -
release-3-2-0pre2-3328-g7045272
Jeremy Allison
jra at samba.org
Tue Jan 6 01:57:05 GMT 2009
The branch, v3-2-test has been updated
via 7045272e5436e3a24d187945e405cb3cc407ce73 (commit)
from 101ef64e3181335b66524296af08f7df04391b9a (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test
- Log -----------------------------------------------------------------
commit 7045272e5436e3a24d187945e405cb3cc407ce73
Author: Bo Yang <boyang at novell.com>
Date: Mon Jan 5 17:55:22 2009 -0800
clean event context after child is forked.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source/lib/events.c | 6 ++++++
source/lib/util.c | 3 +++
source/nmbd/asyncdns.c | 3 ++-
source/nmbd/nmbd.c | 3 ++-
source/printing/print_cups.c | 3 ++-
source/printing/printing.c | 3 ++-
source/smbd/server.c | 7 +++++--
source/winbindd/winbindd.c | 3 ++-
source/winbindd/winbindd_cm.c | 3 ++-
source/winbindd/winbindd_dual.c | 37 +++++++++++++++++++++++++------------
10 files changed, 51 insertions(+), 20 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/lib/events.c b/source/lib/events.c
index f5d6480..8c40d06 100644
--- a/source/lib/events.c
+++ b/source/lib/events.c
@@ -354,6 +354,12 @@ int event_loop_once(struct event_context *ev)
return 0;
}
+void event_context_reinit(struct event_context *ev)
+{
+ event_context_destructor(ev);
+ return;
+}
+
struct event_context *event_context_init(TALLOC_CTX *mem_ctx)
{
return TALLOC_ZERO_P(NULL, struct event_context);
diff --git a/source/lib/util.c b/source/lib/util.c
index dafaf03..321aedb 100644
--- a/source/lib/util.c
+++ b/source/lib/util.c
@@ -1035,6 +1035,7 @@ void become_daemon(bool Fork, bool no_process_group)
}
bool reinit_after_fork(struct messaging_context *msg_ctx,
+ struct event_context *ev_ctx,
bool parent_longlived)
{
NTSTATUS status;
@@ -1062,6 +1063,8 @@ bool reinit_after_fork(struct messaging_context *msg_ctx,
return false;
}
+ event_context_reinit(ev_ctx);
+
return true;
}
diff --git a/source/nmbd/asyncdns.c b/source/nmbd/asyncdns.c
index ab9b1ed..baa88bc 100644
--- a/source/nmbd/asyncdns.c
+++ b/source/nmbd/asyncdns.c
@@ -164,7 +164,8 @@ void start_async_dns(void)
CatchSignal(SIGHUP, SIG_IGN);
CatchSignal(SIGTERM, SIGNAL_CAST sig_term );
- if (!reinit_after_fork(nmbd_messaging_context(), true)) {
+ if (!reinit_after_fork(nmbd_messaging_context(),
+ nmbd_event_context(), true)) {
DEBUG(0,("reinit_after_fork() failed\n"));
smb_panic("reinit_after_fork() failed");
}
diff --git a/source/nmbd/nmbd.c b/source/nmbd/nmbd.c
index b72be2b..b880804 100644
--- a/source/nmbd/nmbd.c
+++ b/source/nmbd/nmbd.c
@@ -912,7 +912,8 @@ static bool open_sockets(bool isdaemon, int port)
pidfile_create("nmbd");
- if (!reinit_after_fork(nmbd_messaging_context(), false)) {
+ if (!reinit_after_fork(nmbd_messaging_context(),
+ nmbd_event_context(), false)) {
DEBUG(0,("reinit_after_fork() failed\n"));
exit(1);
}
diff --git a/source/printing/print_cups.c b/source/printing/print_cups.c
index f3eb73c..de7bcf5 100644
--- a/source/printing/print_cups.c
+++ b/source/printing/print_cups.c
@@ -390,7 +390,8 @@ static bool cups_pcap_load_async(int *pfd)
/* Child. */
close_all_print_db();
- if (!reinit_after_fork(smbd_messaging_context(), true)) {
+ if (!reinit_after_fork(smbd_messaging_context(),
+ smbd_event_context(), true)) {
DEBUG(0,("cups_pcap_load_async: reinit_after_fork() failed\n"));
smb_panic("cups_pcap_load_async: reinit_after_fork() failed");
}
diff --git a/source/printing/printing.c b/source/printing/printing.c
index 9bd237c..ad293ea 100644
--- a/source/printing/printing.c
+++ b/source/printing/printing.c
@@ -1421,7 +1421,8 @@ void start_background_queue(void)
close(pause_pipe[0]);
pause_pipe[0] = -1;
- if (!reinit_after_fork(smbd_messaging_context(), true)) {
+ if (!reinit_after_fork(smbd_messaging_context(),
+ smbd_event_context(), true)) {
DEBUG(0,("reinit_after_fork() failed\n"));
smb_panic("reinit_after_fork() failed");
}
diff --git a/source/smbd/server.c b/source/smbd/server.c
index d4435b5..34a3321 100644
--- a/source/smbd/server.c
+++ b/source/smbd/server.c
@@ -740,7 +740,9 @@ static bool open_sockets_smbd(bool is_daemon, bool interactive, const char *smb_
false);
if (!reinit_after_fork(
- smbd_messaging_context(), true)) {
+ smbd_messaging_context(),
+ smbd_event_context(),
+ true)) {
DEBUG(0,("reinit_after_fork() failed\n"));
smb_panic("reinit_after_fork() failed");
}
@@ -1286,7 +1288,8 @@ extern void build_options(bool screen);
if (is_daemon)
pidfile_create("smbd");
- if (!reinit_after_fork(smbd_messaging_context(), false)) {
+ if (!reinit_after_fork(smbd_messaging_context(),
+ smbd_event_context(), false)) {
DEBUG(0,("reinit_after_fork() failed\n"));
exit(1);
}
diff --git a/source/winbindd/winbindd.c b/source/winbindd/winbindd.c
index 3edd76b..442f072 100644
--- a/source/winbindd/winbindd.c
+++ b/source/winbindd/winbindd.c
@@ -1222,7 +1222,8 @@ int main(int argc, char **argv, char **envp)
TimeInit();
- if (!reinit_after_fork(winbind_messaging_context(), false)) {
+ if (!reinit_after_fork(winbind_messaging_context(),
+ winbind_event_context(), false)) {
DEBUG(0,("reinit_after_fork() failed\n"));
exit(1);
}
diff --git a/source/winbindd/winbindd_cm.c b/source/winbindd/winbindd_cm.c
index 14e4237..343ad39 100644
--- a/source/winbindd/winbindd_cm.c
+++ b/source/winbindd/winbindd_cm.c
@@ -199,7 +199,8 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
/* Leave messages blocked - we will never process one. */
- if (!reinit_after_fork(winbind_messaging_context(), true)) {
+ if (!reinit_after_fork(winbind_messaging_context(),
+ winbind_event_context(), true)) {
DEBUG(0,("reinit_after_fork() failed\n"));
_exit(0);
}
diff --git a/source/winbindd/winbindd_dual.c b/source/winbindd/winbindd_dual.c
index 858e9d6..104a645 100644
--- a/source/winbindd/winbindd_dual.c
+++ b/source/winbindd/winbindd_dual.c
@@ -1070,7 +1070,8 @@ static bool fork_domain_child(struct winbindd_child *child)
state.sock = fdpair[0];
close(fdpair[1]);
- if (!reinit_after_fork(winbind_messaging_context(), true)) {
+ if (!reinit_after_fork(winbind_messaging_context(),
+ winbind_event_context(), true)) {
DEBUG(0,("reinit_after_fork() failed\n"));
_exit(0);
}
@@ -1119,20 +1120,32 @@ static bool fork_domain_child(struct winbindd_child *child)
messaging_register(winbind_messaging_context(), NULL,
MSG_DEBUG, debug_message);
+ primary_domain = find_our_domain();
+
+ if (primary_domain == NULL) {
+ smb_panic("no primary domain found");
+ }
+ /* we have destroy all time event in reinit_after_fork()
+ * set check_online_event to NULL */
+ for (domain = domain_list(); domain; domain = domain->next) {
+ domain->check_online_event = NULL;
+ }
+
+ /* It doesn't matter if we allow cache login,
+ * try to bring domain online after fork. */
if ( child->domain ) {
child->domain->startup = True;
child->domain->startup_time = time(NULL);
- }
-
- /* Ensure we have no pending check_online events other
- than one for this domain or the primary domain. */
-
- for (domain = domain_list(); domain; domain = domain->next) {
- if (domain->primary) {
- primary_domain = domain;
- }
- if ((domain != child->domain) && !domain->primary) {
- TALLOC_FREE(domain->check_online_event);
+ /* we can be in primary domain or in trusted domain
+ * If we are in trusted domain, set the primary domain
+ * in start-up mode */
+ if (!(child->domain->internal)) {
+ set_domain_online_request(child->domain);
+ if (!(child->domain->primary)) {
+ primary_domain->startup = True;
+ primary_domain->startup_time = time(NULL);
+ set_domain_online_request(primary_domain);
+ }
}
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list