NetBSD Problem Report #44763

From yamt@NetBSD.org  Thu Mar 24 07:01:44 2011
Return-Path: <yamt@NetBSD.org>
Received: by www.NetBSD.org (Postfix, from userid 1270)
	id 609AA63B8DE; Thu, 24 Mar 2011 07:01:44 +0000 (UTC)
Message-Id: <20110324070144.609AA63B8DE@www.NetBSD.org>
Date: Thu, 24 Mar 2011 07:01:44 +0000 (UTC)
From: yamt@NetBSD.org
Reply-To: yamt@NetBSD.org
To: gnats-bugs@NetBSD.org
Subject: select/poll direct-set optimization seems racy
X-Send-Pr-Version: 3.95

>Number:         44763
>Category:       kern
>Synopsis:       select/poll direct-set optimization seems racy
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    hannken
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Mar 24 07:05:00 +0000 2011
>Closed-Date:    Tue Nov 01 02:13:09 +0000 2011
>Last-Modified:  Tue Nov 01 02:13:09 +0000 2011
>Originator:     YAMAMOTO Takashi
>Release:        NetBSD current
>Organization:

>Environment:


System: NetBSD current
Architecture: i386
Machine: i386
>Description:
	select/poll direct-set optimization seems racy.

	- there is a race between sel_setevents and pollscan/selscan wrt
	  ofds bits/revents updates.  thus l_selret is inaccurate.
	- sel_setevents can increase l_selret more than desirable if selnotify
	  is called again and again quickly enough
>How-To-Repeat:
	run regress/sys/kern/select
>Fix:
	a workaround: NO_DIRECT_SELECT

>Release-Note:

>Audit-Trail:

Responsible-Changed-From-To: kern-bug-people->rmind
Responsible-Changed-By: rmind@NetBSD.org
Responsible-Changed-When: Thu, 07 Apr 2011 01:29:39 +0000
Responsible-Changed-Why:
Take.


From: "Juergen Hannken-Illjes" <hannken@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/44763 CVS commit: src/sys/kern
Date: Sat, 6 Aug 2011 11:04:25 +0000

 Module Name:	src
 Committed By:	hannken
 Date:		Sat Aug  6 11:04:25 UTC 2011

 Modified Files:
 	src/sys/kern: sys_select.c

 Log Message:
 Fix the races of direct select()/poll():

 - When sel_do_scan() restarts do a full initialization with selclear() so
   we start from an empty set without registered events.  Defer the
   evaluation of l_selret after selclear() and add the count of direct events
   to the count of events.

 - For selscan()/pollscan() zero the output descriptors before we poll and
   for selscan() take the sc_lock before we change them.

 - Change sel_setevents() to not count events already set.

 Reviewed by: YAMAMOTO Takashi <yamt@netbsd.org>

 Should fix PR #44763 (select/poll direct-set optimization seems racy)
        and PR #45187 (select(2) sometimes doesn't wakeup)


 To generate a diff of this commit:
 cvs rdiff -u -r1.33 -r1.34 src/sys/kern/sys_select.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

Responsible-Changed-From-To: rmind->hannken
Responsible-Changed-By: hannken@NetBSD.org
Responsible-Changed-When: Thu, 11 Aug 2011 06:05:40 +0000
Responsible-Changed-Why:
Take.


State-Changed-From-To: open->feedback
State-Changed-By: hannken@NetBSD.org
State-Changed-When: Thu, 11 Aug 2011 06:05:40 +0000
State-Changed-Why:
Should be fixed now - please confirm.


State-Changed-From-To: feedback->closed
State-Changed-By: yamt@NetBSD.org
State-Changed-When: Tue, 01 Nov 2011 02:13:09 +0000
State-Changed-Why:
i don't see the symptom anymore.  thanks!


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.