svn commit: samba r8409 - in branches/SAMBA_4_0/source/lib/events: .

tridge at samba.org tridge at samba.org
Wed Jul 13 03:55:23 GMT 2005


Author: tridge
Date: 2005-07-13 03:55:22 +0000 (Wed, 13 Jul 2005)
New Revision: 8409

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=8409

Log:
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

Modified:
   branches/SAMBA_4_0/source/lib/events/events_standard.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/events/events_standard.c
===================================================================
--- branches/SAMBA_4_0/source/lib/events/events_standard.c	2005-07-13 03:25:36 UTC (rev 8408)
+++ branches/SAMBA_4_0/source/lib/events/events_standard.c	2005-07-13 03:55:22 UTC (rev 8409)
@@ -335,6 +335,10 @@
 	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 @@
 {
 	struct std_event_context *std_ev = talloc_get_type(ev->additional_data,
 		 					   struct std_event_context);
-	struct timeval tval, *tvalp;
+	struct timeval tval;
 
-	tvalp = NULL;
-
 	/* 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);
 }
 
 /*



More information about the samba-cvs mailing list