New version FreeSWITCH 0.9.2.4 uses a new FreeSWITCH revision 13784.
1. Testing up to this time seems to indicate that latency problem may be resolved will be doing more testing tomorrow to confirm.
2. Repaired mod_fax that was broken in 0.9.2.3
3. Added a caller id name prefix to IVR (auto attendant) and the Hunt Groups. This make is possible to indicate where the call came from.
I'm getting an immediate segfault attempting to recieve a fax in freeswitch with 0.9.2.4 running 1.2.3-RC2. It appears to be a library version issue with spandsp/mod_fax
Some troubleshooting follows:
# /usr/local/bin/gdb66 --args /usr/local/freeswitch/bin/freeswitch -c -waste
GNU gdb 6.6 [GDB v6.6 for FreeBSD]
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-portbld-freebsd7.2"...
(gdb) run
-----Freeswitch startup snipped----
2009-06-17 21:04:57.483533 [NOTICE] switch_channel.c:602 New Channel sofia/internal/1010@sip.od.donnellyclan.org [4548650a-a45b-de11-9aef-0017319ad0c8]
2009-06-17 21:04:57.498540 [INFO] mod_dialplan_xml.c:252 Processing Patrick H Donnelly->7100 in context default
2009-06-17 21:04:57.504619 [INFO] switch_core_session.c:1391 Sending early media
2009-06-17 21:04:57.514531 [INFO] mod_sofia.c:1493 Ring SDP:
v=0
o=FreeSWITCH 1245254783 1245254784 IN IP4 98.109.123.106
s=FreeSWITCH
c=IN IP4 98.109.123.106
t=0 0
m=audio 32314 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
2009-06-17 21:04:57.514531 [NOTICE] mod_sofia.c:1496 Pre-Answer sofia/internal/1010@sip.od.donnellyclan.org!
2009-06-17 21:04:57.555712 [NOTICE] mod_dptools.c:649 Channel [sofia/internal/1010@sip.od.donnellyclan.org] has been answered
Program received signal SIGSEGV, Segmentation fault.
fax_rx (s=0x29567018, amp=0x0, len=4096) at fax.c:252
252 fax.c: No such file or directory.
in fax.c
(gdb) bt
#0 fax_rx (s=0x29567018, amp=0x0, len=4096) at fax.c:252
#1 0x28d50ce9 in process_fax (session=0x28e8f018, data=0x28603f00 "/usr/local/freeswitch/storage/fax/7100/inbox/1010-2009-06-17-21-04-59.tif", app_mode=FUNCTION_RX) at mod_fax.c:644
#2 0x28d51110 in spanfax_rx_function (session=0x28e8f018, data=0x28603f00 "/usr/local/freeswitch/storage/fax/7100/inbox/1010-2009-06-17-21-04-59.tif") at mod_fax.c:776
#3 0x280d741c in switch_core_session_exec (session=0x28e8f018, application_interface=0x28f84128, arg=0x294f5070 "/usr/local/freeswitch/storage/fax/7100/inbox/${last_fax}.tif")
at src/switch_core_session.c:1475
#4 0x280d7939 in switch_core_session_execute_application (session=0x28e8f018, app=0x294f5068 "rxfax", arg=0x294f5070 "/usr/local/freeswitch/storage/fax/7100/inbox/${last_fax}.tif")
at src/switch_core_session.c:1397
#5 0x280dd9c5 in switch_core_session_run (session=0x28e8f018) at src/switch_core_state_machine.c:166
#6 0x280d9445 in switch_core_session_thread (thread=0x28f7ab40, obj=0x28e8f018) at src/switch_core_session.c:1065
#7 0x2814bac6 in dummy_worker (opaque=0x28f7ab40) at threadproc/unix/thread.c:138
#8 0x28223741 in ?? () from /lib/libthr.so.3
#9 0x28f7ab40 in ?? ()
#10 0x00000000 in ?? ()
---------------------------
From the backtrace it's
apparently dieing in fax_rx of fax.c in the spandsp module but it really shouldn't be. Line 252 is marked w/ an * here:
SPAN_DECLARE(int) fax_rx(fax_state_t *s, int16_t *amp, int len)
{
int i;
#if defined(LOG_FAX_AUDIO)
if (s->modems.audio_rx_log >= 0)
write(s->modems.audio_rx_log, amp, len*sizeof(int16_t));
#endif
for (i = 0; i < len; i++)
amp[i] = dc_restore(&s->modems.dc_restore, amp[i]);
* s->modems.rx_handler(s->modems.rx_user_data, amp, len);
t30_timer_update(&s->t30, len);
return 0;
}
From what I can tell, all the objects being referenced are valid, so we shouldn't be getting a SIGSEGV
--------------
(gdb) print s
$1 = (fax_state_t *) 0x29567018
(gdb) print s->modems
$2 = {use_tep = 685042368, transmit_on_idle = 1, hdlc_tx = {crc_bytes = 2, underflow_handler = 0x28d6cc50 <hdlc_underflow_handler>, user_data = 0x29567018, inter_frame_flags = 2, progressive = 0,
-----SNIP large amount of variables-----
(gdb) print s->modems.rx_user_data
$3 = (void *) 0x29578138
(gdb) print s->modems.rx_handler
$4 = (span_rx_handler_t *) 0x28d6d920 <fsk_rx>
-------
However, Here's where it gets somewhat interesting: s->modems.rx_handler is a function pointer for the current modem state; in this case, the function it's pointing to, fsk_rx, is defined thus:
SPAN_DECLARE_NONSTD(int) fsk_rx(fsk_rx_state_t *s, const int16_t *amp, int len)
Note that rx_user_data above is a void pointer, being implicitly cast to fsk_rx_state_t, casting it ourselves in GDB yields:
--------
print (fsk_rx_state_t)s->modems.rx_user_data
$5 = {baud_rate = 693641528, sync_mode = 685224400, put_bit = 0x29583cb0, put_bit_user_data = 0x0, status_handler = 0, status_user_data = 0x0, carrier_on_power = 300, carrier_off_power = 1, power = {shift = 0,
reading = 0}, last_sample = 0, signal_present = 0, phase_rate = {0, 0}, phase_acc = {0, 0}, correlation_span = 0, window = {{{re = 0, im = 0}, {re = 8000, im = 0}, {re = 0, im = 0}, {re = 685655762,
im = 685200768}, {re = 0, im = 0}, {re = 0, im = 0}, {re = 0, im = 0}, {re = 0, im = 685042368}, {re = 0, im = 693100568}, {re = 693081792, im = 692880944}, {re = 693650976, im = 672421184}, {
re = 672422848, im = 693100568}, {re = 693081856, im = 693650984}, {re = 693651000, im = 672421184}, {re = 672422848, im = 0}, {re = 0, im = 0} <repeats 113 times>}, {{re = 0,
im = 0} <repeats 128 times>}}, dot = {{re = 0, im = 0}, {re = 0, im = 0}}, buf_ptr = 0, baud_inc = 0, baud_pll = 0, lastbit = 0, scaling_shift = 0}
-----
Aside from the odd baud rate, the data appears to be superficially valid for a first run, dot products are zeroed, last sample populated with data, etc, HOWEVER, opening fsk.h from rev. 13784 of freeswitch shows fsk_rx_state_t with different fields: baud_rate, framing mode, ... The 0.5 tarball from the spandsp site shows the same old variable names: baud_rate, sync_mode, etc. So apparently there's a disconnect somewhere. As a precaution I wiped all libspandsp files on my box and re-installed the pfsense base image and freeswitch, but the problem seems to persist.
Do you have a version of freeswitch/spandsp compiled with full debugging symbols I could D/L to see if I can get some more info that way?