Greetings,
I've run into a bug in Kamailio 1.4.4 where, if using the permissions
module with db_mysql the database becomes unavailable, Kamailio will
crash (SIGSEGV) somewhat arbitrarily after about 30-45 seconds. The
process is a little random; sometimes it can take longer.
At first, I suspected the problem may be with 1.4.x, but got the exact
same effect when trying 1.5.2. I also assumed the problem may be with
db_mysql or even libmysqlclient, but when I remove the permissions
functionality from the configuration the process does not crash. This
is a configuration from the 1.4.x era with a lot of custom DB queries
via avp_db_query() (pre-sqlops); when the database disappears, Kamailio
will complain loudly in the logs, of course, but it will not crash
unless I am calling allow_trusted() as part of the configuration and am
using the permissions module with database backing.
The test system is CentOS 4.7 64-bit, but I've reproduced the problem on
Debian lenny and unstable just as easily with libmysqlclient15.
Here are my steps for producing the bug:
1) Initialise Kamailio (the only modules that use database are
permissions and avpops);
2) Firewall MySQL database off or shut it down;
3) Place a call - even one will do;
4) Kamailio will not crash immediately; it usually takes several
request retransmissions or successive attempts to contact the database
for this to happen, and it can take close to a minute. Eventually,
though, there is a segfault that appears to be bubbling up from
allow_trusted() in the call stack.
Here is the backtrace. IP addresses and phone numbers are sanitised to
protect confidentiality, but have been substituted consistently:
(gdb) where
0 0x00000030eba21b70 in mysql_real_escape_string ()
from /usr/lib64/mysql/libmysqlclient.so.15
1 0x0000002a95be64c1 in db_mysql_val2str (_c=0x686e60, _v=0x7fbfffd900,
_s=0x6331a7 "222.22.222.22'", _len=0x7fbfffd2cc) at val.c:233
0000002 0x00000000004b2f14 in db_print_where (_c=0x686e60,
_b=0x63319f "src_ip='222.22.222.22'", _l=65473, _k=0x7fbfffd440,
_o=0x0,
_v=0x7fbfffd900, _n=1, val2str=0x2a95be62ca <db_mysql_val2str>)
at db/db_ut.c:275
0000003 0x00000000004affb8 in db_do_query (_h=0x686e60, _k=0x7fbfffd440,
_op=0x0,
_v=0x7fbfffd900, _c=Variable "_c" is not available.
) at db/db_query.c:78
0000004 0x0000002a95be2dbf in db_mysql_query (_h=0x0, _k=0x6331a7,
_op=0x2a962492a0, _v=0xe, _c=0x7fbfffd900, _n=6844000, _nc=0, _o=0x0,
_r=0x0) at dbase.c:249
0000005 0x0000002a961428c0 in allow_trusted (msg=0x687038,
src_ip=0x2a962492a0 "222.22.223.23", proto=1) at trusted.c:422
0000006 0x0000002a96143356 in allow_trusted_0 (_msg=0x687038,
str1=Variable "str1" is not available.
)
at ../../parser/../ip_addr.h:398
0000007 0x000000000040d4df in do_action (a=0x6566f8, msg=0x687038) at
action.c:850
0000008 0x000000000040ec2b in run_action_list (a=Variable "a" is not
available.
) at action.c:138
0000009 0x00000000004523dc in eval_expr (e=0x6567c8, msg=0x687038, val=0x0)
at route.c:1116
0000010 0x00000000004527c2 in eval_expr (e=0x656810, msg=0x687038, val=0x0)
at route.c:1429
11 0x0000000000452159 in eval_expr (e=0x656858, msg=0x687038, val=0x0)
at route.c:1434
12 0x000000000040c933 in do_action (a=0x656e70, msg=0x687038) at
action.c:705
13 0x000000000040ec2b in run_action_list (a=Variable "a" is not available.
) at action.c:138
14 0x000000000040e95f in do_action (a=0x657f00, msg=0x687038) at
action.c:728
15 0x000000000040ec2b in run_action_list (a=Variable "a" is not available.
) at action.c:138
16 0x000000000040e95f in do_action (a=0x657fd0, msg=0x687038) at
action.c:728
17 0x000000000040ec2b in run_action_list (a=Variable "a" is not available.
) at action.c:138
18 0x000000000040ef30 in run_top_route (a=0x651008, msg=0x687038)
at action.c:118
---Type <return> to continue, or q <return> to quit---
19 0x00000000004467ef in receive_msg (
buf=0x622ac0 "INVITE
sip:8005551212@123.132.132.7:5060;transport=udp SIP/2.0\r\nRecord-Route:
<sip:222.22.223.23;lr;rpdicor=VPSF506071629460;vsf=AAAAAB0GDgULBQIABgJ3AW4CFhgKGwIbARoJNDg->\r\nRecord-Route:
<sip:90.148.216.254"..., len=922,
rcv_info=0x7fbffff700) at receive.c:165 0000020 0x0000000000480c44
in udp_rcv_loop () at udp_server.c:449 21 0x0000000000422b4f in main
(argc=Variable "argc" is not available. ) at main.c:692
--
Alex Balashov - Principal
Evariste Systems
Web : http://www.evaristesys.com/
Tel : (+1) (678) 954-0670
Direct : (+1) (678) 954-0671
Revision: 5927
http://openser.svn.sourceforge.net/openser/?rev=5927&view=rev
Author: miconda
Date: 2009-10-01 19:03:04 +0000 (Thu, 01 Oct 2009)
Log Message:
-----------
- set dlg context after pre script callbacks of timeout route, where is reset
- reported by Nathan Angelacos
Modified Paths:
--------------
branches/1.5/modules/dialog/dlg_handlers.c
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
i made some fixes to lib/srdb1/gw.xml file. how do i regenerate
corresponding tools/kamctl/mysql (and other db) files?
earlier 'make dbschema' did it, but doesn't exit anymore.
-- juha
Hi,
its now possible to use "make dbschema" in the top level directory to re-
generate the database scheme files for the modules that originates from
kamailio.
This command also already generates the "tables.sgml" file in
doc/databases/kamailio. One piece that is still missing from the kamailio
state is the support to actually generate the different documentation (html,
pdf, txt) from the source file, i'll hope to finish this next week.
Henning