Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Mar 2011 08:31:35 +0000 (UTC)
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r219813 - head/sbin/hastd
Message-ID:  <201103210831.p2L8VZ6P004701@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pjd
Date: Mon Mar 21 08:31:35 2011
New Revision: 219813
URL: http://svn.freebsd.org/changeset/base/219813

Log:
  If there is any traffic on one of out descriptors, we were not checking for
  long running hooks. Fix it by not using select(2) timeout to decide if we want
  to check hooks or not.
  
  MFC after:	1 week

Modified:
  head/sbin/hastd/hastd.c

Modified: head/sbin/hastd/hastd.c
==============================================================================
--- head/sbin/hastd/hastd.c	Mon Mar 21 06:18:26 2011	(r219812)
+++ head/sbin/hastd/hastd.c	Mon Mar 21 08:31:35 2011	(r219813)
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 #include <string.h>
 #include <sysexits.h>
+#include <time.h>
 #include <unistd.h>
 
 #include <activemap.h>
@@ -877,9 +878,11 @@ main_loop(void)
 	struct timeval seltimeout;
 	struct timespec sigtimeout;
 	int fd, maxfd, ret, signo;
+	time_t lastcheck, now;
 	sigset_t mask;
 	fd_set rfds;
 
+	lastcheck = time(NULL);	
 	seltimeout.tv_sec = REPORT_INTERVAL;
 	seltimeout.tv_usec = 0;
 	sigtimeout.tv_sec = 0;
@@ -943,9 +946,18 @@ main_loop(void)
 
 		PJDLOG_ASSERT(maxfd + 1 <= (int)FD_SETSIZE);
 		ret = select(maxfd + 1, &rfds, NULL, NULL, &seltimeout);
-		if (ret == 0)
+		now = time(NULL);
+		if (lastcheck + REPORT_INTERVAL <= now) {
 			hook_check();
-		else if (ret == -1) {
+			lastcheck = now;
+		}
+		if (ret == 0) {
+			/*
+			 * select(2) timed out, so there should be no
+			 * descriptors to check.
+			 */
+			continue;
+		} else if (ret == -1) {
 			if (errno == EINTR)
 				continue;
 			KEEP_ERRNO((void)pidfile_remove(pfh));



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103210831.p2L8VZ6P004701>