[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