[SCM] Samba Shared Repository - branch v3-6-test updated

Stefan Metzmacher metze at samba.org
Mon Jan 31 09:30:03 MST 2011


The branch, v3-6-test has been updated
       via  3d2f728 s3:lib/events: use DLIST_DEMOTE() for fd events
       via  d677921 s3:smbd: let smbd_server_connection_loop_once() check for select errors
       via  d506b57 s3:lib/events: don't loop over fd events is select gave -1
       via  8e7bb97 Revert "s3: Fix starving the echo responder"
       via  089bf22 Revert "s3:events: Call all ready fd event handlers on each iteration of the main loop"
      from  a619d61 s4-smbtorture: add samr_changepassworduser3 ndr torture tests.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test


- Log -----------------------------------------------------------------
commit 3d2f72844a221dbdfe94fbf6e2b45c98ee158a9b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 24 08:47:12 2011 +0100

    s3:lib/events: use DLIST_DEMOTE() for fd events
    
    This makes sure that fd events doesn't dry out,
    because a fd with a lower number is busy.
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Mon Jan 31 16:59:44 CET 2011 on sn-devel-104
    (cherry picked from commit ad10289ebcc78ab62ec86abb29f81eb769d17f4e)

commit d677921237c66e6cdf83de04e16c576a101d6493
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 24 09:00:53 2011 +0100

    s3:smbd: let smbd_server_connection_loop_once() check for select errors
    
    metze
    (cherry picked from commit 0bbe7334d69bcaa476f0741e0bd9685b023a4208)

commit d506b574bb94fdc23c5a62c5326cd478b5b63a11
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 24 08:57:47 2011 +0100

    s3:lib/events: don't loop over fd events is select gave -1
    
    metze
    (cherry picked from commit 1f2be10ebf4cc06e3b7aac41ea35bfc4a41ce828)

commit 8e7bb97409da74de7a9712f9c6504fb56f1f440a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 24 08:56:56 2011 +0100

    Revert "s3: Fix starving the echo responder"
    
    This reverts commit d5cf6482ed0cd9a11448ca04944b2e01200a7c89.
    
    I'll add a more generic fix for this problem.
    
    metze
    (cherry picked from commit 6953e2fa66410d466832b5e582921a291d224c5b)

commit 089bf22c7355aa715a76233f9313559b8bf25fab
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 24 08:47:38 2011 +0100

    Revert "s3:events: Call all ready fd event handlers on each iteration of the main loop"
    
    This reverts commit 455fccf86b6544cd17a2571c63a88f8aebff3f74.
    
    I'll add a more generic fix for this problem.
    
    metze
    (cherry picked from commit 19d3779274314bb4ce76e3afaa21cf37de7b2b98)

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

Summary of changes:
 source3/include/event.h          |    2 +-
 source3/lib/events.c             |   23 ++++++++---------------
 source3/nmbd/nmbd_packets.c      |    6 +++---
 source3/smbd/process.c           |   26 ++++++++------------------
 source3/winbindd/winbindd_dual.c |    6 +++---
 5 files changed, 23 insertions(+), 40 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/event.h b/source3/include/event.h
index 101a967..dc45b76 100644
--- a/source3/include/event.h
+++ b/source3/include/event.h
@@ -30,7 +30,7 @@ bool event_add_to_select_args(struct event_context *event_ctx,
 			      fd_set *read_fds, fd_set *write_fds,
 			      struct timeval *timeout, int *maxfd);
 bool run_events(struct event_context *event_ctx,
-		int *selrtn, fd_set *read_fds, fd_set *write_fds);
+		int selrtn, fd_set *read_fds, fd_set *write_fds);
 struct timeval *get_timed_events_timeout(struct event_context *event_ctx,
 					 struct timeval *to_ret);
 void dump_event_list(struct event_context *event_ctx);
diff --git a/source3/lib/events.c b/source3/lib/events.c
index d987072..07a270c 100644
--- a/source3/lib/events.c
+++ b/source3/lib/events.c
@@ -68,7 +68,7 @@ bool event_add_to_select_args(struct tevent_context *ev,
 }
 
 bool run_events(struct tevent_context *ev,
-		int *selrtn, fd_set *read_fds, fd_set *write_fds)
+		int selrtn, fd_set *read_fds, fd_set *write_fds)
 {
 	struct tevent_fd *fde;
 	struct timeval now;
@@ -113,7 +113,7 @@ bool run_events(struct tevent_context *ev,
 		return true;
 	}
 
-	if (*selrtn <= 0) {
+	if (selrtn <= 0) {
 		/*
 		 * No fd ready
 		 */
@@ -123,18 +123,11 @@ bool run_events(struct tevent_context *ev,
 	for (fde = ev->fd_events; fde; fde = fde->next) {
 		uint16 flags = 0;
 
-		if (FD_ISSET(fde->fd, read_fds)) {
-			flags |= EVENT_FD_READ;
-			FD_CLR(fde->fd, read_fds);
-			(*selrtn)--;
-		}
-		if (FD_ISSET(fde->fd, write_fds)) {
-			flags |= EVENT_FD_WRITE;
-			FD_CLR(fde->fd, write_fds);
-			(*selrtn)--;
-		}
+		if (FD_ISSET(fde->fd, read_fds)) flags |= EVENT_FD_READ;
+		if (FD_ISSET(fde->fd, write_fds)) flags |= EVENT_FD_WRITE;
 
 		if (flags & fde->flags) {
+			DLIST_DEMOTE(ev->fd_events, fde, struct tevent_fd);
 			fde->handler(ev, fde, flags, fde->private_data);
 			return true;
 		}
@@ -171,7 +164,7 @@ static int s3_event_loop_once(struct tevent_context *ev, const char *location)
 	struct timeval to;
 	fd_set r_fds, w_fds;
 	int maxfd = 0;
-	int ret = 0;
+	int ret;
 
 	FD_ZERO(&r_fds);
 	FD_ZERO(&w_fds);
@@ -179,7 +172,7 @@ static int s3_event_loop_once(struct tevent_context *ev, const char *location)
 	to.tv_sec = 9999;	/* Max timeout */
 	to.tv_usec = 0;
 
-	if (run_events(ev, &ret, NULL, NULL)) {
+	if (run_events(ev, 0, NULL, NULL)) {
 		return 0;
 	}
 
@@ -196,7 +189,7 @@ static int s3_event_loop_once(struct tevent_context *ev, const char *location)
 		return -1;
 	}
 
-	run_events(ev, &ret, &r_fds, &w_fds);
+	run_events(ev, ret, &r_fds, &w_fds);
 	return 0;
 }
 
diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c
index 73ee141..48d10cc 100644
--- a/source3/nmbd/nmbd_packets.c
+++ b/source3/nmbd/nmbd_packets.c
@@ -1857,7 +1857,7 @@ bool listen_for_packets(bool run_election)
 
 	fd_set r_fds;
 	fd_set w_fds;
-	int selrtn = 0;
+	int selrtn;
 	struct timeval timeout;
 #ifndef SYNC_DNS
 	int dns_fd;
@@ -1884,7 +1884,7 @@ bool listen_for_packets(bool run_election)
 #endif
 
 	/* Process a signal and timer events now... */
-	if (run_events(nmbd_event_context(), &selrtn, NULL, NULL)) {
+	if (run_events(nmbd_event_context(), 0, NULL, NULL)) {
 		return False;
 	}
 
@@ -1903,7 +1903,7 @@ bool listen_for_packets(bool run_election)
 
 	selrtn = sys_select(maxfd+1,&r_fds,&w_fds,NULL,&timeout);
 
-	if (run_events(nmbd_event_context(), &selrtn, &r_fds, &w_fds)) {
+	if (run_events(nmbd_event_context(), selrtn, &r_fds, &w_fds)) {
 		return False;
 	}
 
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index 12ea28a..75bd770 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -963,7 +963,7 @@ void smbd_setup_sig_hup_handler(struct tevent_context *ev,
 static NTSTATUS smbd_server_connection_loop_once(struct smbd_server_connection *conn)
 {
 	fd_set r_fds, w_fds;
-	int selrtn = 0;
+	int selrtn;
 	struct timeval to;
 	int maxfd = 0;
 
@@ -986,7 +986,7 @@ static NTSTATUS smbd_server_connection_loop_once(struct smbd_server_connection *
 				 &r_fds, &w_fds, &to, &maxfd);
 
 	/* Process a signal and timed events now... */
-	if (run_events(smbd_event_context(), &selrtn, NULL, NULL)) {
+	if (run_events(smbd_event_context(), 0, NULL, NULL)) {
 		return NT_STATUS_RETRY;
 	}
 
@@ -1001,25 +1001,15 @@ static NTSTATUS smbd_server_connection_loop_once(struct smbd_server_connection *
 		errno = sav;
 	}
 
-	/* Check if error */
-	if (selrtn == -1) {
-		if (errno == EINTR)
-			return NT_STATUS_RETRY;
-		else
-			/* Maybe the socket is dead? */
-			return map_nt_error_from_unix(errno);
+	if (selrtn == -1 && errno != EINTR) {
+		return map_nt_error_from_unix(errno);
 	}
 
-	/* Process events until all available fds have been handled.
-	 * This allows for fair round-robin handling of all available fds
-	 * on each select() wakeup, while still maintaining responsiveness
-	 * by re-checking for signal and timed events between the handling
-	 * of each ready fd. */
-	do {
-		run_events(smbd_event_context(), &selrtn, &r_fds, &w_fds);
-	} while (selrtn > 0);
+	if (run_events(smbd_event_context(), selrtn, &r_fds, &w_fds)) {
+		return NT_STATUS_RETRY;
+	}
 
-	/* Processed all fds or timed out */
+	/* Did we timeout ? */
 	if (selrtn == 0) {
 		return NT_STATUS_RETRY;
 	}
diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c
index a32459d..ac50a56 100644
--- a/source3/winbindd/winbindd_dual.c
+++ b/source3/winbindd/winbindd_dual.c
@@ -1418,7 +1418,7 @@ static bool fork_domain_child(struct winbindd_child *child)
 
 	while (1) {
 
-		int ret = 0;
+		int ret;
 		fd_set r_fds;
 		fd_set w_fds;
 		int maxfd;
@@ -1429,7 +1429,7 @@ static bool fork_domain_child(struct winbindd_child *child)
 		int iov_count;
 		NTSTATUS status;
 
-		if (run_events(winbind_event_context(), &ret, NULL, NULL)) {
+		if (run_events(winbind_event_context(), 0, NULL, NULL)) {
 			TALLOC_FREE(frame);
 			continue;
 		}
@@ -1465,7 +1465,7 @@ static bool fork_domain_child(struct winbindd_child *child)
 
 		ret = sys_select(maxfd + 1, &r_fds, &w_fds, NULL, tp);
 
-		if (run_events(winbind_event_context(), &ret, &r_fds, &w_fds)) {
+		if (run_events(winbind_event_context(), ret, &r_fds, &w_fds)) {
 			/* We got a signal - continue. */
 			TALLOC_FREE(frame);
 			continue;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list