1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-26 10:04:02 +03:00

r8409: fixed another error found on netbsd.

some of our torture code does its own timeout processing, which means
there is no event timer in the event context. To fix this gererically
I have added a 30 second timout to all select/epoll calls so the
callers timeout loop is guaranteed to run eventually
(This used to be commit 01e5aa146439f2dbf6c4133a0b5d910383a6576b)
This commit is contained in:
Andrew Tridgell 2005-07-13 03:55:22 +00:00 committed by Gerald (Jerry) Carter
parent d1291dacbd
commit b433d61537

View File

@ -335,6 +335,10 @@ static void std_event_loop_timer(struct event_context *ev)
struct timeval t = timeval_current();
struct timed_event *te = std_ev->timed_events;
if (te == NULL) {
return;
}
te->next_event = timeval_zero();
te->handler(ev, te, t, te->private_data);
@ -479,31 +483,32 @@ static int std_event_loop_once(struct event_context *ev)
{
struct std_event_context *std_ev = talloc_get_type(ev->additional_data,
struct std_event_context);
struct timeval tval, *tvalp;
tvalp = NULL;
struct timeval tval;
/* work out the right timeout for all timed events */
if (std_ev->timed_events) {
struct timeval t = timeval_current();
tval = timeval_diff(&std_ev->timed_events->next_event, &t);
tvalp = &tval;
if (timeval_is_zero(tvalp)) {
if (timeval_is_zero(&tval)) {
std_event_loop_timer(ev);
return 0;
}
} else {
/* have a default tick time of 30 seconds. This guarantees
that code that uses its own timeout checking will be
able to proceeed eventually */
tval = timeval_set(30, 0);
}
#if WITH_EPOLL
if (std_ev->epoll_fd != -1) {
if (std_event_loop_epoll(ev, tvalp) == 0) {
if (std_event_loop_epoll(ev, &tval) == 0) {
return 0;
}
}
#endif
return std_event_loop_select(ev, tvalp);
return std_event_loop_select(ev, &tval);
}
/*