On Sat, Aug 15, 2009 at 11:53 AM, Jon Smirl<jonsmirl@xxxxxxxxx> wrote: > void > bfio_synch_stop(void) > { > int n; > > if (base_handle == NULL) { > return; > } > FOR_IN_AND_OUT { > for (n = 0; n < n_handles[IO]; n++) { I added: snd_pcm_nonblock(handles[IO][n], 0) snd_pcm_drain(handles[IO][n]) snd_pcm_nonblock(handles[IO][n], SND_PCM_NONBLOCK ) > snd_pcm_close(handles[IO][n]); > } > } > } This is not working correctly. snd_pcm_nonblock(handles[IO][n], 0) It does not remove O_NONBLOCK for some unknown reason. I added printf() to snd_pcm_hw_nonblock() The fcntl is not getting an error. if (fcntl(fd, F_SETFL, flags) < 0) { Flags being set are 2 (O_RDWR). But when I get over to snd_pcm_pre_drain_init(), I get the -EAGAIN error. static int snd_pcm_pre_drain_init(struct snd_pcm_substream *substream, int state) { printk("snd_pcm_pre_drain_init\n"); if (substream->f_flags & O_NONBLOCK) return -EAGAIN; printk("snd_pcm_pre_drain_init 1\n"); substream->runtime->trigger_master = substream; return 0; } So I have to conclude that fcntl(fd, F_SETFL, flags) is not removing the O_NONBLOCK flag. If I change the inital PCM open to be blocking everything works as expected. -- Jon Smirl jonsmirl@xxxxxxxxx _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel