[Asterisk-Users] Re: Hangups - SIGFPE in dsp.c

Manfred Petz pm at deuromedia.at
Wed Aug 18 01:32:29 MST 2004


Hi again,

after two hours of testing, the following patch seems to fix my problem, 
it may not be the best way to do this, however.

It seems to be an i4l issue, so this problem should better be fixed in 
chan_modem_i4l. Btw, I use a vanilla fedora core 2.0 kernel 
(2.6.7-1.494.2.2). with one HFC card in point2point mode.


--- ../asterisk-v-1_0_RC2/dsp.c 2004-07-24 23:06:54.000000000 +0200
+++ dsp.c       2004-08-18 10:11:26.017124954 +0200
@@ -1229,6 +1229,13 @@
        int x;
        int res = 0;

+       /*PM BEGIN*/
+       if (len==0) {
+               ast_log(LOG_WARNING, "zero length packet\n");
+               return 0;
+       }
+       /*PM END*/
+
        accum = 0;
        for (x=0;x<len; x++)
                accum += abs(s[x]);



pm





On Wed, 18 Aug 2004, Manfred Petz wrote:

| Hi,
| 
| I'm running the latest CVS HEAD version of asterisk, and I'm experiencing
| hangups during voice conversation. This happens quite regularely and often.
| 
| The problem is in dsp.c, line 1235, where it says
| 
|         accum /= len;
| 
| But `len', at this point, is 0, resulting in a SIGFPE. The routine ast_frame
| *i4l_read() in channels/chan_modem_i4l.c:411 is setting p->fr.datalen to
| p->obuflen which is zero.
| 
| Has anybody noticed this, too?
| 
| Since I don't know the code, I cannot suggest a fix, but maybe someone
| who does is listening? :)
| 
| For testing purposes, I changed the source line to
| 
| 	if (len)
| 		accum /= len;
| 
| 
| Manfred
| 
| 
| 
| #0  0x080a3178 in __ast_dsp_silence (dsp=0x9eb6980, s=0x9e2593c, len=0,
| totalsilence=0x0) at dsp.c:1235
| #1  0x080a12ec in ast_dsp_process (chan=0x9e75ab8, dsp=0x9eb6980,
| af=0x9e258cc) at dsp.c:1468
| #2  0x00b89ade in i4l_read (p=0x9e257c0) at chan_modem_i4l.c:451
| #3  0x008f59fb in modem_read (ast=0x0) at chan_modem.c:484
| #4  0x0805b1fa in ast_read (chan=0x9e75ab8) at channel.c:1277
| #5  0x0805c809 in ast_readstring (c=0x9e75ab8, s=0x4b74b40 "1", len=79,
| timeout=2000, ftimeout=10000, enders=0x35762a "#") at channel.c:1080
| #6  0x0034b9ba in vm_execmain (chan=0x9e75ab8, data=0x4f) at
| app_voicemail.c:3573
| #7  0x080727ff in pbx_exec (c=0x9e75ab8, app=0x9e755b8, data=0x4b77810,
| newstack=1) at pbx.c:467
| #8  0x0807a6f3 in pbx_extension_helper (c=0x9e75ab8, context=0x9e75c10
| "incoming", exten=0x9e75d04 "8500", priority=2, callerid=0x9e9b7e0
| "69911590527", action=135059155) at pbx.c:1271
| #9  0x08074798 in ast_pbx_run (c=0x9e75ab8) at pbx.c:1752
| #10 0x0807ad21 in pbx_thread (data=0x0) at pbx.c:1971
| #11 0x00d7198c in start_thread () from /lib/tls/libpthread.so.0
| #12 0x00cbd16a in clone () from /lib/tls/libc.so.6
| 
| 
| 
| 
| 
| 
| 




More information about the asterisk-users mailing list