[alsa-devel] floating point exception triggered by speaker-test on pc-speaker

Takashi Iwai tiwai at suse.de
Wed Nov 26 14:37:14 CET 2008


At Sun, 23 Nov 2008 14:30:24 +0500,
Alexander E. Patrakov wrote:
> 
> Hello,
> 
> I have hit a strange bug. To reproduce:
> 
> 1. Build snd-pcsp.ko.
> 
> 2. alsamixer -c pcsp, set the base frequency to 37286 Hz
> 
> 3. $ speaker-test -r 22050 -P 4 -D plughw:pcsp
> 
> speaker-test 1.0.18
> 
> Playback device is plughw:pcsp
> Stream parameters are 22050Hz, S16_LE, 1 channels
> Using 16 octaves of pink noise
> Rate set to 22050Hz (requested 22050Hz)
> Buffer size range from 37 to 38756
> Period size range from 18 to 19379
> Using max buffer size 38756
> Periods = 4
> was set period_size = 0
> was set buffer_size = 38756
>   0 - Front Left
> Floating point exception
> 
> I.e., as you see, period size somehow became 0. While debugging this with printfs, I 
> noticed that the interval for periods in snd_pcm_hw_param_set_near() starts with 4, 
> but doesn't include it (i.e., is open).
> 
> Also, I found that snd_interval_refine_first() and snd_interval_refine_last(), when 
> given an open interval, refine it to something like (n n+1). This is obviously 
> wrong, as there are no integer points in this interval. Changing i->max++ and 
> i->min-- there to adjust the value by 2 did eliminate the floating point exception, 
> but replaced it with "Unable to set nperiods 4 for playback: Invalid argument". So 
> there must be something else also wrong, but I can't pinpoint it and give you a 
> ready-made patch :(

Thanks for reporting.  The problem is that speaker-test examines the
parameters before calling snd_pcm_hw_params().  After calling, these
are set properly (even with pcsp driver :)

The fix is committed now.


Takashi


More information about the Alsa-devel mailing list