Date: Sat, 30 Sep 1995 21:25:49 -0700 From: "Amancio Hasty Jr." <hasty@rah.star-gate.com> To: Gene Stark <gene@starkhome.cs.sunysb.edu> Cc: hackers@freebsd.org, multimedia@star-gate.com Subject: Re: Problems with VAT and Sound Code Message-ID: <199510010425.VAA00283@rah.star-gate.com> In-Reply-To: Your message of "Sat, 30 Sep 1995 22:54:48 EDT." <199510010254.WAA12297@starkhome.cs.sunysb.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
Hmm... Have you considered using vmix with vat? Amancio >>> Gene Stark said: > Even with the sound code now in -stable, I am still unable to get VAT > to work with an SB-16. The symptom is that there is no sound. If you > select one of the audio tests, you hear nothing until you delete the > VAT window, at which time there is a very brief spurt of the test tone. > During the time there is no sound in the speakers, VAT appears to operate > normally. If you talk into the mike you can see the little level meter > bounce around, etc. A ps on VAT indicates it is spending its time in > select. > > On the off chance that I might spot a problem in the audio select() > code, I started looking at that part of the drivers. My first impression > is that there are a *lot* of potential race conditions due to incorrect > positioning of DISABLE_INTR and ENABLE_INTR. > > For example, in audio.c (line 494) we have: > > if (wr_buff_no[dev] != -1) > return 1; /* There is space in the current buffer */ > > return DMAbuf_select (dev, file, sel_type, wait); > break; > > However, interrupts are not disabled, leaving the possibility of a > race if an interrupt occurs between testing no space in the buffer > and sleeping in DMAbuf_select(). > > In dmabuf.c (line 986) we have: > > if (!space_in_queue (dev)) > { > DISABLE_INTR (flags); > #if defined(__FreeBSD__) > selrecord(wait, &selinfo[dev]); > #else > dev_sleep_flag[dev].mode = WK_SLEEP; > select_wait (&dev_sleeper[dev], wait); > #endif > RESTORE_INTR (flags); > return 0; > } > return 1; > break; > > Again, the queue space is being checked outside of the critical section, > allowing a race and potential indefinite sleep. > > Of course, my impressions here could be due to the fact that I am not > familiar with the code (just started looking at it), but it sure looks > like trouble to me. > > Can anyone confirm or refute the correctness of these observations? > I thought by now most of the drivers with incorrect handling of critical > sections had been rooted out and fixed. > > - Gene Stark >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199510010425.VAA00283>