1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-27 14:04:05 +03:00

r15084: Try and squeeze more out of the non-read/write code path.

Jeremy.
This commit is contained in:
Jeremy Allison 2006-04-14 03:55:42 +00:00 committed by Gerald (Jerry) Carter
parent 1c99aed563
commit 23dcff4d50
3 changed files with 17 additions and 11 deletions

View File

@ -103,17 +103,13 @@ void run_events(void)
return;
}
struct timeval *get_timed_events_timeout(struct timeval *to_ret, time_t default_to)
struct timeval *get_timed_events_timeout(struct timeval *to_ret)
{
struct timeval now;
if (timed_events == NULL) {
if (default_to == (time_t)-1) {
return NULL;
}
*to_ret = timeval_set(default_to, 0);
return to_ret;
}
now = timeval_current();
*to_ret = timeval_until(&now, &timed_events->when);

View File

@ -684,9 +684,10 @@ static BOOL fork_domain_child(struct winbindd_child *child)
GetTimeOfDay(&now);
tp = get_timed_events_timeout(&t, (time_t)-1);
tp = get_timed_events_timeout(&t);
if (tp) {
DEBUG(11,("select will use timeout of %d seconds\n", (int)tp->tv_sec));
DEBUG(11,("select will use timeout of %u.%u seconds\n",
(unsigned int)tp->tv_sec, (unsigned int)tp->tv_usec ));
}
/* Handle messages */

View File

@ -357,7 +357,7 @@ static BOOL receive_message_or_smb(char *buffer, int buffer_len, int timeout)
{
fd_set fds;
int selrtn;
struct timeval to = timeval_set(SMBD_SELECT_TIMEOUT, 0);
struct timeval to;
int maxfd = 0;
smb_read_error = 0;
@ -367,6 +367,9 @@ static BOOL receive_message_or_smb(char *buffer, int buffer_len, int timeout)
if (timeout >= 0) {
to.tv_sec = timeout / 1000;
to.tv_usec = (timeout % 1000) * 1000;
} else {
to.tv_sec = SMBD_SELECT_TIMEOUT;
to.tv_usec = 0;
}
/*
@ -441,14 +444,20 @@ static BOOL receive_message_or_smb(char *buffer, int buffer_len, int timeout)
goto again;
}
/*
* Are there any timed events waiting ? If so, ensure we don't
* select for longer than it would take to wait for them.
*/
{
struct timeval tmp;
struct timeval *tp = get_timed_events_timeout(&tmp,SMBD_SELECT_TIMEOUT);
struct timeval *tp = get_timed_events_timeout(&tmp);
if (tp) {
to = timeval_min(&to, tp);
if (timeval_is_zero(&to)) {
return True;
/* Process a timed event now... */
run_events();
}
}
}