Re: quit snd_pcm_readi, retrieve pending frames

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Takashi Iwai <tiwai <at> suse.de> writes:
> 
> At Mon, 15 May 2006 12:06:47 +0200,
> I wrote:
> > 
> > At Sat, 13 May 2006 13:06:51 +0200,
> > Gerald Grabner wrote:
> > > 
> > > Hi,
> > > 
> > > I'm experimenting with the ALSA PCM API and was wondering whether
> > > there is a simple way to exit a record loop by stopping the pcm, but
> > > without loosing pending frames.
> > > 
> > > Initially, I was thinking of something like this, where I would call
> > > snd_pcm_drop(pcm) from some other thread:
> > > 
> > >    while ( true )
> > >      {
> > >        r = snd_pcm_readi (pcm, data, frames);
> > >        fwrite (data, 2, 2*r, file);
> > >        if ( r != frames )
> > >          break;
> > >      }
> > > 
> > > However, snd_pcm_drain(pcm) doesn't work here; the loop continues.
> > > snd_pcm_drop(pcm) breaks the loop, but pending frames are lost, and
> > > r=-EBADFD.
> > > 
> > > Is there an easy way to stop snd_pcm_readi in a way that I can
> > > retrieve the residual frames? Do I need to set any parameters for
> > > that purpose?
> > 
> > If you're using hw or plughw, it's likely a bug in alsa-driver.
> > Try the patch below.
> 
> Actually the patch was also wrong.  snd_pcm_drain() shouldn't wait for
> the capture streams.  So, the patch becomes pretty simple like below.
> I'll commit it to HG repo.
> 
> Takashi
> 
> diff -r 44d28ed5d3d5 core/pcm_native.c
> --- a/core/pcm_native.c	Wed May 17 11:26:39 2006 +0200
> +++ b/core/pcm_native.c	Wed May 17 17:07:17 2006 +0200
>  <at>  <at>  -1469,8 +1469,6  <at>  <at>  static int snd_pcm_drain(
struct snd_pcm_
>  		}
>  	}
>  	up_read(&snd_pcm_link_rwsem);
> -	if (! num_drecs)
> -		goto _error;
> 
>  	snd_pcm_stream_lock_irq(substream);
>  	/* resume pause */


Hi Takashi,

there seems to be some problem with this patch (the short one). After
recompiling the kernel (and my application), my application doesn't
exit and I can't kill it anymore. The pcm device is kind of lost. See
below for the /var/log/messages entry.

Gerald


May 19 22:49:58 tux Unable to handle kernel NULL pointer dereference
at virtual address 00000001
May 19 22:49:58 tux printing eip:
May 19 22:49:58 tux 00000001
May 19 22:49:58 tux *pde = 00000000
May 19 22:49:58 tux Oops: 0000 [#1]
May 19 22:49:58 tux PREEMPT 
May 19 22:49:58 tux Modules linked in: ipt_REJECT xt_tcpudp
iptable_filter ipt_MASQUERADE iptable_nat ip_nat ip_conntrack
ip_tables x_tables nvidia
May 19 22:49:58 tux CPU:    0
May 19 22:49:58 tux EIP:    0060:[<00000001>]    Tainted: P      VLI
May 19 22:49:58 tux EFLAGS: 00210087   (2.6.16-gentoo-r7 #2) 
May 19 22:49:58 tux EIP is at 0x1
May 19 22:49:58 tux eax: d8f83ebc ebx: 00000001 ecx: 00000001 edx:
d8f83ec8
May 19 22:49:58 tux esi: 00000001 edi: db22e4a4 ebp: d87e1e84 esp:
d87e1e60
May 19 22:49:58 tux ds: 007b   es: 007b   ss: 0068
May 19 22:49:58 tux Process mplay (pid: 10349, threadinfo=d87e0000
task=df8f60d0)
May 19 22:49:58 tux Stack: <0>c010f8d4 d8f83ebc 00000003 00000000
00000000 00200002 d87e0000 00000000
May 19 22:49:58 tux 00200046 d87e1eac c010f911 db22e4a4 00000003
00000001 00000000 00000000
May 19 22:49:58 tux 00000000 00000001 c03d12fc dfcad980 c02afde4
00000000 00000001 d87e0000
May 19 22:49:58 tux Call Trace:
May 19 22:49:58 tux [<c010f8d4>] __wake_up_common+0x2b/0x47
May 19 22:49:58 tux [<c010f911>] __wake_up+0x21/0x44
May 19 22:49:58 tux [<c02afde4>] snd_pcm_action_single+0x2e/0x44
May 19 22:49:58 tux [<c02afe45>] snd_pcm_action+0x4b/0x55
May 19 22:49:58 tux [<c02b0118>] snd_pcm_stop+0x12/0x16
May 19 22:49:58 tux [<c02b0bbc>] snd_pcm_drop+0x8b/0xc3
May 19 22:49:58 tux [<c02b19d9>] snd_pcm_release+0x1e/0xbb
May 19 22:49:58 tux [<c01444d1>] __fput+0x83/0x142
May 19 22:49:58 tux [<c0143146>] filp_close+0x4c/0x55
May 19 22:49:58 tux [<c011426d>] close_files+0x4b/0x5b
May 19 22:49:58 tux [<c01142be>] put_files_struct+0x13/0x3b
May 19 22:49:58 tux [<c0114bd7>] do_exit+0x19a/0x35d
May 19 22:49:58 tux [<c0114e4f>] sys_exit_group+0x0/0x11
May 19 22:49:58 tux [<c0102549>] syscall_call+0x7/0xb
May 19 22:49:58 tux Code:  Bad EIP value.
May 19 22:49:58 tux <1>Fixing recursive fault but reboot is needed!
May 19 22:49:58 tux scheduling while atomic: mplay/0x00000003/10349
May 19 22:49:58 tux [<c033cbf1>] schedule+0x43/0x53f
May 19 22:49:58 tux [<c0102773>] error_code+0x4f/0x54
May 19 22:49:58 tux [<c0114aea>] do_exit+0xad/0x35d
May 19 22:49:58 tux [<c0102e2b>] do_trap+0x0/0xc1
May 19 22:49:58 tux [<c010e3c8>] do_page_fault+0x38d/0x4bd
May 19 22:49:58 tux [<c0116b54>] __do_softirq+0x34/0x7d
May 19 22:49:58 tux [<c010e03b>] do_page_fault+0x0/0x4bd
May 19 22:49:58 tux [<c0102773>] error_code+0x4f/0x54
May 19 22:49:58 tux [<c010f8d4>] __wake_up_common+0x2b/0x47
May 19 22:49:58 tux [<c010f911>] __wake_up+0x21/0x44
May 19 22:49:58 tux [<c02afde4>] snd_pcm_action_single+0x2e/0x44
May 19 22:49:58 tux [<c02afe45>] snd_pcm_action+0x4b/0x55
May 19 22:49:58 tux [<c02b0118>] snd_pcm_stop+0x12/0x16
May 19 22:49:58 tux [<c02b0bbc>] snd_pcm_drop+0x8b/0xc3
May 19 22:49:58 tux [<c02b19d9>] snd_pcm_release+0x1e/0xbb
May 19 22:49:58 tux [<c01444d1>] __fput+0x83/0x142
May 19 22:49:58 tux [<c0143146>] filp_close+0x4c/0x55
May 19 22:49:58 tux [<c011426d>] close_files+0x4b/0x5b
May 19 22:49:58 tux [<c01142be>] put_files_struct+0x13/0x3b
May 19 22:49:58 tux [<c0114bd7>] do_exit+0x19a/0x35d
May 19 22:49:58 tux [<c0114e4f>] sys_exit_group+0x0/0x11
May 19 22:49:58 tux [<c0102549>] syscall_call+0x7/0xb




-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux