[Freeswitch-users] mod_crd_sqlite entry limit and sqlite segfaults on triggers
Neven Boric
nboric at yx.cl
Wed Apr 27 16:19:00 MSD 2011
It seems I have fixed the issue. I did a backtrace with gdb and saw that
the crash was when sqlite3ExprListDup called strdup passing a NULL
pointer. I asked on the SQLIte mailing list and they told me that SQLite
doesn't use strdup. So, I downloaded the original 3.3.13 SQLite release
and compared it to the Freeswitch code. I found out that calls to
sqlite3StrDup had been replaced with calls to strdup (see sqliteInt.h).
Problem is sqlite3StrDup checks for NULL input, whereas strdup does not.
I put the following instead:
#define sqliteStrDup(x) (x?strdup(x):NULL)//sqlite3StrDup(x)
And now I can create triggers without crashes. Seems to me that as
nobody uses triggers inside Freeswitch, this issue has gone unnoticed so
far.
I will continue testing to discard any side effects.
Neven Boric escribió:
> Hi,
>
> By looking at the code, I believe there is no limit on the number of
> rows mod_cdr_sqlite will add to the cdr table. This could lead to
> (eventually) eating all RAM if you DB is in tmpfs or eating all disk
> space if it is stored on disk. Is this correct or am I missing something?
>
> To correct this I tried to add a trigger to the table along the lines of:
>
> CREATE TRIGGER IF NOT EXISTS CDR_LIMIT AFTER INSERT ON cdr
> BEGIN
> DELETE FROM crd WHERE rowid <= (SELECT MAX(rowid) from cdr) - 100000;
> END
>
> and no matter how I try to add the trigger, I get a segmentation fault
> when the code calls sqlite3_exec in switch_core_db_exec.
>
> Currently I'm blaiming SQLite, as there is a somewhat similar issue
> involving triggers reported for versions older than 3.5.4 (FS is using
> 3.3.13)
>
> http://sqlite.org/cvstrac/wiki?p=DatabaseCorruption
>
> Of course I could just execute the delete statement manually after
> every insert, but it is uglier (more costly, non atomic).
>
> Has anyone any experience using triggers with the sqlite version
> included in FS? Or has anyone tried other solution to limit the number
> on entries on the cdr table?
>
> Thanks in advance
> Neven Boric
>
>
More information about the FreeSWITCH-users
mailing list