[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