Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Jan 2004 13:18:04 -0800 (PST)
From:      Don Lewis <truckman@FreeBSD.org>
To:        shoesoft@gmx.net
Cc:        mat@cnd.mcgill.ca
Subject:   Re: write(2) lc_r problem
Message-ID:  <200401242118.i0OLI47E073265@gw.catspoiler.org>
In-Reply-To: <1074978522.690.12.camel@shoeserv.freebsd>

next in thread | previous in thread | raw e-mail | index | archive | help
On 24 Jan, Stefan Ehmann wrote:
> On Sat, 2004-01-24 at 21:03, Mathew Kanner wrote:
>> On Jan 24, Stefan Ehmann wrote:
>> > On Sat, 2004-01-24 at 20:15, Mathew Kanner wrote:
>> > > On Jan 24, Stefan Ehmann wrote:
>> > > > I'm trying to write a small sound application and run across a problem
>> > > > on CURRENT.
>> > > > 
>> > > > It's very basic at the moment. It simply reads pcm data from a file and
>> > > > uses write(2) on /dev/dsp.
>> > > > 
>> > > > But as soon as I link the program with -lc_r there's always about 1
>> > > > second delay before a write call - which makes it pretty unusable for
>> > > > playing sound.
>> > > > 
>> > > > It should be easy reproducable if you link audio/waveplay with -lc_r.
>> > > > 
>> > > > This doesn't happen in either FreeBSD 4.9, Knoppix or CURRENT if linked
>> > > > with -lkse or -lthr.
>> > > > 
>> > > > Am I'm missing something basic when using write together with lc_r or
>> > > > ist this a bug in CURRENT?
>> > > 
>> > > 	There is definetly a bug with the sound code when using vchans
>> > > and select.  Make sure that  (using sysctl)
>> > > 
>> > > 	hw.snd.maxautovchans=0
>> > > 	hw.snd.pcmX.vchans=0
>> > 
>> > You're right, that fixed it. That's also the reason why it worked on
>> > stable (vchans was disabled there).
>> 
>> 	Please try this untested patch with vchans enabled.
>> 
> 
> Great, now it also works with vchans enabled.
> 
> I'm also testing a pcm patch by truckman@ at the moment. Unfortunately
> those two combined don't run nicely.
> 
> Panicstring: mutex pcm0:virtual:0 not owned at /usr/src/sys/dev/sound/pcm/channel.c:90

Uncomment the CHN_LOCKASSERT(c) in chn_wakeup, and bracket the
chn_wakeup() call in the SLIST_FOREACH() loop with
	CHN_LOCK(pce->channel);
	CHN_UNLOCK(pce->channel);




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200401242118.i0OLI47E073265>