From owner-freebsd-bugs@FreeBSD.ORG Tue Mar 16 11:20:09 2004 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 24E9716A4CE for ; Tue, 16 Mar 2004 11:20:09 -0800 (PST) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 04A7843D31 for ; Tue, 16 Mar 2004 11:20:09 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) i2GJK8bv044134 for ; Tue, 16 Mar 2004 11:20:08 -0800 (PST) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.10/8.12.10/Submit) id i2GJK8wc044133; Tue, 16 Mar 2004 11:20:08 -0800 (PST) (envelope-from gnats) Resent-Date: Tue, 16 Mar 2004 11:20:08 -0800 (PST) Resent-Message-Id: <200403161920.i2GJK8wc044133@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, "Ramy M. Hassan" Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 155CC16A4CE for ; Tue, 16 Mar 2004 11:11:54 -0800 (PST) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0EF8543D31 for ; Tue, 16 Mar 2004 11:11:54 -0800 (PST) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.12.10/8.12.10) with ESMTP id i2GJBr72036808 for ; Tue, 16 Mar 2004 11:11:53 -0800 (PST) (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.12.10/8.12.10/Submit) id i2GJBr67036807; Tue, 16 Mar 2004 11:11:53 -0800 (PST) (envelope-from nobody) Message-Id: <200403161911.i2GJBr67036807@www.freebsd.org> Date: Tue, 16 Mar 2004 11:11:53 -0800 (PST) From: "Ramy M. Hassan" To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Subject: misc/64347: Bug in sysv semaphore waiting processes count X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Mar 2004 19:20:09 -0000 >Number: 64347 >Category: misc >Synopsis: Bug in sysv semaphore waiting processes count >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Mar 16 11:20:08 PST 2004 >Closed-Date: >Last-Modified: >Originator: Ramy M. Hassan >Release: 4.9RELEASE >Organization: AAST >Environment: FreeBSD GawabSRV01.Gawab.com 4.9-RELEASE-p2 FreeBSD 4.9-RELEASE-p2 #0: Tue Mar 2 03:21:19 EET 2004 root@GawabSRV01.Gawab.com:/usr/obj/usr/src/sys/GAWABMAINSMPWFC i386 >Description: When a procss is waiting for a semaphore value to be more than zero ( calling semop ) , then receives a signal, the semop() returns -1 and errno is set to EINTR. This is fine, but the problem is that the number of processes waiting for the semaphore is not decremented. So a successive call to semctl(semsetid,semid,GETNCNT,0) will return an incorrect value. >How-To-Repeat: Write a program that intializes a semaphore set to zero , then call semop in a loop struct sembuf oplist[] = { { 0 , -1 , 0 } }; while ( semop(semid,oplist,1) < 0 ) { printf("Number of waiting processes %d \n",semctl(semid,prof,GETNCNT)); } while the process is waiting on the semaphore , send the process any signal that the process can handle. You will see that the number of waiting processes will increment each time a signal is sent which is incorrect. >Fix: >Release-Note: >Audit-Trail: >Unformatted: