[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha6-6-gbd576b9

Stefan Metzmacher metze at samba.org
Mon Jan 19 23:43:14 GMT 2009


The branch, master has been updated
       via  bd576b93bd8a136e1da8cbac154aa87ab1873c1c (commit)
       via  930b3c15da0bb24672d95ed388957b542cb24f89 (commit)
       via  26e863e6dd864d6466165adebce716f79bec73b6 (commit)
       via  8d203d3cabdea6b3b8903432bcbc889ad6358011 (commit)
       via  fcf9f72e042ca97ede28a3d39c3ce406a3808b18 (commit)
       via  3347ed7e6e416b0534777a73663a353c12cfece7 (commit)
      from  0118b2301b29af0f22845c7e3ebb5df74ba13aeb (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit bd576b93bd8a136e1da8cbac154aa87ab1873c1c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 20 00:37:57 2009 +0100

    socket_wrapper: fix PCAP support broken by aaea68791cfea45c6fa69abc93ad6d0e832d0283
    
    We should note close the fd after writing the first packet.
    
    metze

commit 930b3c15da0bb24672d95ed388957b542cb24f89
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Jan 14 12:25:31 2009 +0100

    s3:messaging: also recreate the local messaging backend in messaging_reinit()
    
    This prepares the change to use signal events in the tdb backend.
    
    metze

commit 26e863e6dd864d6466165adebce716f79bec73b6
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Jan 14 12:21:43 2009 +0100

    s3: reinit_after_fork() should reinit the event context before the messaging context
    
    Because messaging_reinit() may add events to the event context, which will
    removed by event_context_reinit().
    
    metze

commit 8d203d3cabdea6b3b8903432bcbc889ad6358011
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 12 18:11:40 2009 +0100

    s3:events: add support for signal events
    
    metze

commit fcf9f72e042ca97ede28a3d39c3ce406a3808b18
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Jan 18 23:01:59 2009 +0100

    s3:smbd: call message_dispatch() before processing incoming PDUs
    
    This is a hack to fix races which happen with the RAW-RENAME and RAW-OPLOCK
    tests. We should try to remove it later.
    
    metze

commit 3347ed7e6e416b0534777a73663a353c12cfece7
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Jan 14 12:07:45 2009 +0100

    tevent: rename signal handler functions to start with tevent_common_
    
    This makes debugging with gdb easier.
    
    metze

-----------------------------------------------------------------------

Summary of changes:
 lib/socket_wrapper/socket_wrapper.c |    4 +---
 lib/tevent/tevent_signal.c          |   11 ++++++-----
 source3/lib/events.c                |    6 ++++++
 source3/lib/messages.c              |   14 +++++++++++---
 source3/lib/util.c                  |    8 ++++----
 source3/smbd/process.c              |    6 ++++++
 6 files changed, 34 insertions(+), 15 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/socket_wrapper/socket_wrapper.c b/lib/socket_wrapper/socket_wrapper.c
index dc0124b..1e39277 100644
--- a/lib/socket_wrapper/socket_wrapper.c
+++ b/lib/socket_wrapper/socket_wrapper.c
@@ -901,7 +901,7 @@ static int swrap_get_pcap_fd(const char *fname)
 
 		if (write(fd, &file_hdr, sizeof(file_hdr)) != sizeof(file_hdr)) {
 			close(fd);
-			return -1;
+			fd = -1;
 		}
 		return fd;
 	}
@@ -1194,11 +1194,9 @@ static void swrap_dump_packet(struct socket_info *si,
 	fd = swrap_get_pcap_fd(file_name);
 	if (fd != -1) {
 		if (write(fd, packet, packet_len) != packet_len) {
-			close(fd);
 			free(packet);
 			return;
 		}
-		close(fd);
 	}
 
 	free(packet);
diff --git a/lib/tevent/tevent_signal.c b/lib/tevent/tevent_signal.c
index f4a56cd..c21ba20 100644
--- a/lib/tevent/tevent_signal.c
+++ b/lib/tevent/tevent_signal.c
@@ -75,7 +75,7 @@ static uint32_t sig_count(struct sigcounter s)
 /*
   signal handler - redirects to registered signals
 */
-static void signal_handler(int signum)
+static void tevent_common_signal_handler(int signum)
 {
 	char c = 0;
 	SIG_INCREMENT(sig_state->signal_count[signum]);
@@ -88,12 +88,13 @@ static void signal_handler(int signum)
 /*
   signal handler with SA_SIGINFO - redirects to registered signals
 */
-static void signal_handler_info(int signum, siginfo_t *info, void *uctx)
+static void tevent_common_signal_handler_info(int signum, siginfo_t *info,
+					      void *uctx)
 {
 	uint32_t count = sig_count(sig_state->signal_count[signum]);
 	sig_state->sig_info[signum][count] = *info;
 
-	signal_handler(signum);
+	tevent_common_signal_handler(signum);
 
 	/* handle SA_SIGINFO */
 	if (count+1 == SA_INFO_QUEUE_COUNT) {
@@ -215,12 +216,12 @@ struct tevent_signal *tevent_common_add_signal(struct tevent_context *ev,
 	if (sig_state->sig_handlers[signum] == NULL) {
 		struct sigaction act;
 		ZERO_STRUCT(act);
-		act.sa_handler   = signal_handler;
+		act.sa_handler = tevent_common_signal_handler;
 		act.sa_flags = sa_flags;
 #ifdef SA_SIGINFO
 		if (sa_flags & SA_SIGINFO) {
 			act.sa_handler   = NULL;
-			act.sa_sigaction = signal_handler_info;
+			act.sa_sigaction = tevent_common_signal_handler_info;
 			if (sig_state->sig_info[signum] == NULL) {
 				sig_state->sig_info[signum] = talloc_array(sig_state, siginfo_t, SA_INFO_QUEUE_COUNT);
 				if (sig_state->sig_info[signum] == NULL) {
diff --git a/source3/lib/events.c b/source3/lib/events.c
index 8deaa18..74f30a7 100644
--- a/source3/lib/events.c
+++ b/source3/lib/events.c
@@ -86,6 +86,11 @@ bool run_events(struct tevent_context *ev,
 	bool fired = false;
 	struct tevent_fd *fde, *next;
 
+	if (ev->signal_events &&
+	    tevent_common_check_signal(ev)) {
+		return true;
+	}
+
 	/* Run all events that are pending, not just one (as we
 	   did previously. */
 
@@ -262,6 +267,7 @@ static const struct tevent_ops s3_event_ops = {
 	.get_fd_flags	= tevent_common_fd_get_flags,
 	.set_fd_flags	= tevent_common_fd_set_flags,
 	.add_timer	= tevent_common_add_timer,
+	.add_signal	= tevent_common_add_signal,
 	.loop_once	= s3_event_loop_once,
 	.loop_wait	= s3_event_loop_wait,
 };
diff --git a/source3/lib/messages.c b/source3/lib/messages.c
index f5933ca..e4b20c7 100644
--- a/source3/lib/messages.c
+++ b/source3/lib/messages.c
@@ -235,13 +235,21 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
  */
 NTSTATUS messaging_reinit(struct messaging_context *msg_ctx)
 {
-#ifdef CLUSTER_SUPPORT
+	NTSTATUS status;
+
+	TALLOC_FREE(msg_ctx->local);
+
+	status = messaging_tdb_init(msg_ctx, msg_ctx, &msg_ctx->local);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(0, ("messaging_tdb_init failed: %s\n",
+			  nt_errstr(status)));
+		return status;
+	}
 
+#ifdef CLUSTER_SUPPORT
 	TALLOC_FREE(msg_ctx->remote);
 
 	if (lp_clustering()) {
-		NTSTATUS status;
-
 		status = messaging_ctdbd_init(msg_ctx, msg_ctx,
 					      &msg_ctx->remote);
 
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 70eabbf..2485d1d 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -966,6 +966,10 @@ bool reinit_after_fork(struct messaging_context *msg_ctx,
 		return false;
 	}
 
+	if (ev_ctx) {
+		event_context_reinit(ev_ctx);
+	}
+
 	if (msg_ctx) {
 		/*
 		 * For clustering, we need to re-init our ctdbd connection after the
@@ -979,10 +983,6 @@ bool reinit_after_fork(struct messaging_context *msg_ctx,
 		}
 	}
 
-	if (ev_ctx) {
-		event_context_reinit(ev_ctx);
-	}
-
 	return true;
 }
 
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index 0c076b3..ae115f3 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -407,6 +407,9 @@ static void smbd_deferred_open_timer(struct event_context *ev,
 	TALLOC_CTX *mem_ctx = talloc_tos();
 	uint8_t *inbuf;
 
+	/* TODO: remove this hack */
+	message_dispatch(smbd_messaging_context());
+
 	inbuf = (uint8_t *)talloc_memdup(mem_ctx, msg->buf.data,
 					 msg->buf.length);
 	if (inbuf == NULL) {
@@ -1907,6 +1910,9 @@ static void smbd_server_connection_read_handler(struct smbd_server_connection *c
 	TALLOC_CTX *mem_ctx = talloc_tos();
 	NTSTATUS status;
 
+	/* TODO: remove this hack */
+	message_dispatch(smbd_messaging_context());
+
 	/* TODO: make this completely nonblocking */
 
 	status = receive_smb_talloc(mem_ctx, smbd_server_fd(),


-- 
Samba Shared Repository


More information about the samba-cvs mailing list