From nobody@FreeBSD.org  Sun Mar 11 20:22:52 2007
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 214E316A405
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 11 Mar 2007 20:22:52 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [69.147.83.33])
	by mx1.freebsd.org (Postfix) with ESMTP id 188AE13C455
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 11 Mar 2007 20:22:52 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.13.1/8.13.1) with ESMTP id l2BKMpLi019992
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 11 Mar 2007 20:22:51 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.13.1/8.13.1/Submit) id l2BKMpd2019991;
	Sun, 11 Mar 2007 20:22:51 GMT
	(envelope-from nobody)
Message-Id: <200703112022.l2BKMpd2019991@www.freebsd.org>
Date: Sun, 11 Mar 2007 20:22:51 GMT
From: Kapil Jain<kapiltj@yahoo.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: Kqueue: kqueue_register doesn't update the knote flags (kn_flags)
X-Send-Pr-Version: www-3.0

>Number:         110199
>Category:       kern
>Synopsis:       [kqueue] [patch] kqueue_register doesn't update the knote flags (kn_flags)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    jmg
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Mar 11 20:30:04 GMT 2007
>Closed-Date:    
>Last-Modified:  Sun Apr 22 08:52:32 GMT 2007
>Originator:     Kapil Jain
>Release:        4.10, 6.1
>Organization:
Juniper networks
>Environment:
>Description:
      Kqueue_register should be initializing the kn_flags, but it doesn't.
This leads to a discrepancy between the kn_status flags and the kn_flags.

>How-To-Repeat:
      If you enable a read event and then disable it, the kn_flags will show the enable and kn_status disable.
>Fix:
      This patch may fix the problem.

Index: kern_event.c
===================================================================
RCS file: /cvs/junos-2001/src/sys/kern/kern_event.c,v
retrieving revision 1.4
diff -c -r1.4 kern_event.c
*** kern_event.c	14 Feb 2005 02:04:33 -0000	1.4
--- kern_event.c	11 Mar 2007 20:21:56 -0000
***************
*** 568,573 ****
--- 568,575 ----
  		goto done;
  	}
  
+         kn->kn_flags = kev->flags;
+ 
  	if ((kev->flags & EV_DISABLE) &&
  	    ((kn->kn_status & KN_DISABLED) == 0)) {
  		s = splhigh();

>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->jmg 
Responsible-Changed-By: kris 
Responsible-Changed-When: Tue Mar 13 19:30:22 UTC 2007 
Responsible-Changed-Why:  
Assign to kqueue maintainer 

http://www.freebsd.org/cgi/query-pr.cgi?pr=110199 

From: kapil jain <kapiltj@yahoo.com>
To: bug-followup@FreeBSD.org, kapiltj@yahoo.com
Cc:  
Subject: Re: kern/110199: [kqueue] kqueue_register doesn't update the knote flags (kn_flags)
Date: Fri, 13 Apr 2007 15:31:13 -0700 (PDT)

  A better fix is below. This preserves flags such as EV_CLEAR.
  
  Index: kern_event.c 
  =================================================================== 
  RCS file: /cvs/junos-2001/src/sys/kern/kern_event.c,v 
  retrieving revision 1.6 
  diff -p -u -r1.6 kern_event.c 
  --- kern_event.c        10 Apr 2007 18:28:47 -0000      1.6 
  +++ kern_event.c        13 Apr 2007 21:48:04 -0000 
  @@ -937,7 +937,13 @@ findkn: 
                 goto done; 
         } 
   
  +        if (kev->flags & EV_DISABLE) { 
  +            kn->kn_flags &= ~EV_ENABLE; 
  +            kn->kn_flags |= EV_DISABLE; 
  +        } else if (kev->flags & EV_ENABLE) { 
  +            kn->kn_flags &= ~EV_DISABLE; 
  +            kn->kn_flags |= EV_ENABLE; 
  +        } 
   
         if ((kev->flags & EV_DISABLE) && 
             ((kn->kn_status & KN_DISABLED) == 0)) { 
  
  -Kapil
  
>Unformatted:
