From owner-freebsd-bugs Thu Nov 2 1:40: 7 2000 Delivered-To: freebsd-bugs@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id 2F97137B4C5 for ; Thu, 2 Nov 2000 01:40:01 -0800 (PST) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id BAA52071; Thu, 2 Nov 2000 01:40:01 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: from uffdaonline.net (host35.uffdaonline.net [207.109.235.35]) by hub.freebsd.org (Postfix) with ESMTP id AA75437B4D7 for ; Thu, 2 Nov 2000 01:37:52 -0800 (PST) Received: by uffdaonline.net (Postfix, from userid 1000) id 7B329207F; Thu, 2 Nov 2000 03:36:12 -0600 (CST) Message-Id: <20001102093612.7B329207F@uffdaonline.net> Date: Thu, 2 Nov 2000 03:36:12 -0600 (CST) From: zach@uffdaonline.net Reply-To: zach@uffdaonline.net To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.2 Subject: kern/22532: [patch] /dev/dsp is sometimes busy when not opened... Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >Number: 22532 >Category: kern >Synopsis: [patch] /dev/dsp is sometimes busy when not opened... >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Nov 02 01:40:00 PST 2000 >Closed-Date: >Last-Modified: >Originator: Zach N. Heilig >Release: FreeBSD 4.1.1-STABLE i386 >Organization: >Environment: >Description: when opening /dev/dsp for reading+writing, the open function sometimes forgets to reset the read channel busy flag if the open fails (for example: the write channel was busy, but the read channel was not). >How-To-Repeat: #include int main(void) { open("/dev/dsp", O_WRONLY); open("/dev/dsp", O_RDWR); } notice that it is now impossible to open /dev/dsp for reading... >Fix: Index: dsp.c =================================================================== RCS file: /home/ncvs/src/sys/dev/sound/pcm/dsp.c,v retrieving revision 1.15.2.4 diff -u -r1.15.2.4 dsp.c --- dsp.c 2000/10/05 05:05:06 1.15.2.4 +++ dsp.c 2000/11/01 13:27:09 @@ -99,7 +99,11 @@ rdch->flags &= ~CHN_F_BUSY; return EBUSY; } - } else return EBUSY; + } else { + if (rdch && (oflags & FREAD)) + rdch->flags &= ~CHN_F_BUSY; + return EBUSY; + } } d->aplay[chan] = wrch; d->arec[chan] = rdch; >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message