From owner-FreeBSD-users-jp@jp.freebsd.org  Mon Oct 16 15:41:14 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id PAA42824;
	Mon, 16 Oct 2000 15:41:14 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from fgwmail7.fujitsu.co.jp (fgwmail7.fujitsu.co.jp [192.51.44.37])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id PAA42819
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 16 Oct 2000 15:41:14 +0900 (JST)
	(envelope-from hiroya@leap.qdt.ts.fujitsu.co.jp)
Received: from m3.gw.fujitsu.co.jp by fgwmail7.fujitsu.co.jp (8.9.3/3.7W-MX0006-Fujitsu Gateway)
	id PAA26811 for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 16 Oct 2000 15:40:43 +0900 (JST)
	(envelope-from hiroya@leap.qdt.ts.fujitsu.co.jp)
Received: from leap.qdt.ts.fujitsu.co.jp by m3.gw.fujitsu.co.jp (8.9.3/3.7W-0010-Fujitsu Domain Master)
	id PAA12106 for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 16 Oct 2000 15:40:42 +0900 (JST)
	(envelope-from hiroya@leap.qdt.ts.fujitsu.co.jp)
Received: (qmail 1682 invoked from network); 16 Oct 2000 06:31:54 -0000
Received: from localhost (127.0.0.1)
  by localhost with SMTP; 16 Oct 2000 06:31:54 -0000
From: hiroya@qdt.ts.fujitsu.co.jp
To: FreeBSD-users-jp@jp.freebsd.org
In-Reply-To: Your message of "Fri, 13 Oct 2000 16:16:23 +0900"
	<20001013161623I.okuyamak@dd.iij4u.or.jp>
References: <20001013161623I.okuyamak@dd.iij4u.or.jp>
X-Mailer: Mew version 1.93 on Emacs 19.34 / Mule 2.3
 =?iso-2022-jp?B?KBskQkt2RSYyVhsoQik=?=
X-PGP-Fingerprint: 50D4 637F 9968 604F 4F14  BD17 CAF9 162A 55AF 6BA1
X-PGP-Publickey: http://leap.qdt.ts.fujitsu.co.jp/~hiroya/pgp-publickey.txt
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Message-Id: <20001016153131A.hiroya@leap.qdt.ts.fujitsu.co.jp>
Date: Mon, 16 Oct 2000 15:31:31 +0900
X-Dispatcher: imput version 980905(IM100)
Lines: 70
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: FreeBSD-users-jp 56127
Subject: [FreeBSD-users-jp 56127] Re: does select() return trustable tval?
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org
X-Originator: hiroya@leap.qdt.ts.fujitsu.co.jp

  $B;32<(B($BGn(B)$B$G$9!#(B

okuyamak@dd.iij4u.or.jp$B$5$s(B>

 > FreeBSD 4.1 $B$G$NOC$G$9$,!#(Bselect() $B%7%9%F%`%3!<%k$O(B 4$BHVL\$N0z?t$K(B
 > $B!V(Btimeout$B!W(B variable $B$rEO$9$3$H$,$G$-$^$9!#$G!"%^%K%e%"%k$K$b$"$kDL(B
 > $B$j!"(B
 > 
 > 	$B!XK\Mh$O;D$j;~9o$rE,@Z$K99?7$7$F!Y(B
 > 
 > $BJV$C$F$/$k$N$,!"(Bselect() $B$NK\Mh@5$7$$<BAu$G$O$J$$$+!"$H;W$$$^$9!#(B

  $B;d$b$=$&;W$$$^$9!#(B

 > $B%=!<%9%3!<%I$r8+$k$H!"E,@Z$K99?7$5$l$F$$$k!V$+$N$h$&$K!W8+$($^$9!#(B
 > $B$7$+$7!"K\Ev$K$=$&$J$C$F$$$k$N$+$I$&$+!"H=$j$^$;$s$G$7$?!#(B

  $B$=$&$G$9$+(B? cvsweb.cgi$B7PM3$G(Bsys/kern/sys_generic.c(1.55.2.7)$B$rFI$s$G(B
$B$_$^$7$?$,!"(Buap->tv$B$O(Bcopyout()$B$bBeF~$b$5$l$F$J$$$h$&$G$9$1$I!#(B
#4.X$B$J4D6-$,$J$$$N$G<B:]$K;n$7$?$o$1$G$O$J$$$G$9$,(B

 > $B!X(BFreeBSD $B$G$O!"(Bselect $B$N(B timeout $B0z?t$OE,@Z$K99?7$5$l$F$$$k$N$G$7$g(B
 >   $B$&$+(B?$B$5$l$F$$$k$H$7$?$i!"$$$D:"$+$i(B?$B$=$l$H$b(B manual $B$O@5$7$/$F!"(B
 >   $B:#$G$b$3$NCM$OE,@Z$K4IM}$5$l$F$$$J$$$@$1$J$N$G$7$g$&$+(B?$B!Y(B

  2000/01/31$B:"$N(BFreeBSD 3-STABLE$B$r;HMQ$7$F$$$^$9$,!"(Btimeout$B$NCM$OJQ99(B
$B$5$l$F$^$;$s$G$7$?!#(B

-- 
$B;32<Gn9,(B <hiroya@qdt.ts.fujitsu.co.jp>

$B0J2<!"L5J]>Z(B
#$FreeBSD: src/sys/kern/sys_generic.c,v 1.43.2.4 2000/07/27 04:04:12 green Exp $

--- sys_generic.c.org	Sat Jul 29 08:47:55 2000
+++ sys_generic.c	Mon Oct 16 14:59:47 2000
@@ -691,7 +691,7 @@
 		getmicrouptime(&rtv);
 		timevaladd(&atv, &rtv);
 	} else
-		atv.tv_sec = 0;
+		atv.tv_sec = atv.tv_usec = 0;
 	timo = 0;
 retry:
 	ncoll = nselcoll;
@@ -699,7 +699,7 @@
 	error = selscan(p, ibits, obits, uap->nd);
 	if (error || p->p_retval[0])
 		goto done;
-	if (atv.tv_sec) {
+	if (atv.tv_sec || atv.tv_usec) {
 		getmicrouptime(&rtv);
 		if (timevalcmp(&rtv, &atv, >=)) 
 			goto done;
@@ -735,6 +735,15 @@
 		putbits(ou, 1);
 		putbits(ex, 2);
 #undef putbits
+	}
+	if (uap->tv && (error == 0 || error == EINTR)) {
+	    if (p->p_retval[0]) {
+		getmicrouptime(&ttv);
+		rtv = atv;
+		timevalsub(&rtv, &ttv);
+	    } else
+		rtv.tv_sec = rtv.tv_usec = 0;
+	    error = copyout(&rtv, uap->tv, sizeof(rtv));
 	}
 	if (selbits != &s_selbits[0])
 		free(selbits, M_SELECT);
