NetBSD Problem Report #38098

From martin@duskware.de  Sun Feb 24 18:29:20 2008
Return-Path: <martin@duskware.de>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
	by narn.NetBSD.org (Postfix) with ESMTP id 2D04C63B853
	for <gnats-bugs@gnats.netbsd.org>; Sun, 24 Feb 2008 18:29:20 +0000 (UTC)
Message-Id: <20080224181831.8D28E63B853@narn.NetBSD.org>
Date: Sun, 24 Feb 2008 18:18:31 +0000 (UTC)
From: ad@netbsd.org
Reply-To: ad@netbsd.org
To: netbsd-bugs-owner@NetBSD.org
Subject: kqueue is not thread safe
X-Send-Pr-Version: www-1.0

>Number:         38098
>Category:       kern
>Synopsis:       kqueue is not thread safe
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    ad
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Feb 24 18:30:02 +0000 2008
>Closed-Date:    Tue Mar 25 13:10:40 +0000 2008
>Last-Modified:  Tue Mar 25 13:10:40 +0000 2008
>Originator:     Andrew Doran
>Release:        4.99.54
>Organization:
The NetBSD Project
>Environment:
n/a
>Description:
kqueue state is not shared between processes, but is shared between LWPs
within a process. The kqueue code assumes a single threaded system.
For example, in a few places it makes calls that may block, and after
resuming proceeds without re-checking the continued validity of the operation.

>How-To-Repeat:
Code inspection.
>Fix:
Modify the kqueue code to be thread+MP safe.


>Release-Note:

>Audit-Trail:

Responsible-Changed-From-To: kern-bug-people->ad
Responsible-Changed-By: ad@NetBSD.org
Responsible-Changed-When: Fri, 29 Feb 2008 12:13:51 +0000
Responsible-Changed-Why:
Working on a fix.


From: Andrew Doran <ad@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/38098 CVS commit: src/sys
Date: Fri, 21 Mar 2008 21:53:35 +0000 (UTC)

 Module Name:	src
 Committed By:	ad
 Date:		Fri Mar 21 21:53:35 UTC 2008

 Modified Files:
 	src/sys/kern: kern_descrip.c kern_event.c
 	src/sys/sys: event.h eventvar.h file.h filedesc.h
 Added Files:
 	src/sys/kern: sys_descrip.c

 Log Message:
 File descriptor changes, discussed on tech-kern:

 - Redo reference counting to be sane.  LWPs accessing files take a short
   term reference on the local file descriptor.  This is the most common
   case.  While a file is in a process descriptor table, a reference is
   held to the file.  The file reference count only changes during control
   operations like open() or close().  Code that comes at files from an
   unusual direction (i.e. foreign to the process) like procfs or sysctl
   takes a reference on the file (f_count), and not on a descriptor.

 - Remove knowledge of reference counting and locking from most code that
   deals with files.

 - Make the usual case of file descriptor lookup lockless.

 - Make kqueue MP and MT safe. PR kern/38098, PR kern/38137.

 - Fix numerous file handling bugs, and bugs in the descriptor code that
   affected multithreaded processes.

 - Split descriptor system calls out into sys_descrip.c.

 - A few stylistic changes: KNF, remove unused casts now that caddr_t is
   gone. Replace dumb gotos with loop control in a few places.

 - Don't do redundant pointer passing (struct proc, lwp, filedesc *) unless
   the routine is likely to be inlined.  Most of the time it's about the
   current process.


 To generate a diff of this commit:
 cvs rdiff -r1.172 -r1.173 src/sys/kern/kern_descrip.c
 cvs rdiff -r1.48 -r1.49 src/sys/kern/kern_event.c
 cvs rdiff -r0 -r1.1 src/sys/kern/sys_descrip.c
 cvs rdiff -r1.19 -r1.20 src/sys/sys/event.h
 cvs rdiff -r1.7 -r1.8 src/sys/sys/eventvar.h
 cvs rdiff -r1.63 -r1.64 src/sys/sys/file.h
 cvs rdiff -r1.45 -r1.46 src/sys/sys/filedesc.h

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

State-Changed-From-To: open->closed
State-Changed-By: ad@NetBSD.org
State-Changed-When: Tue, 25 Mar 2008 13:10:40 +0000
State-Changed-Why:

fixed


>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.