Thanks, my reply inline: Sincerely, Zaryab
--- On Thu, 2/10/11, Pavel Ivanov <paiva...@gmail.com> wrote: > From: Pavel Ivanov <paiva...@gmail.com> > Subject: Re: [sqlite] SIGSEGV Error when using sqlite3_exec( ) > To: "General Discussion of SQLite Database" <sqlite-users@sqlite.org> > Cc: "Zaryab Munir (zmunir)" <zmu...@cisco.com> > Date: Thursday, February 10, 2011, 5:11 AM > Zaryab, > > There's no need to repeat your email several times. > > > Question1: Can I have multiple connections > opened for each thread to > > the same in-memory dbase. > > No. Each connection to ":memory:" creates unique in-memory > database > which will be deleted when that connection is closed. [zm]: Based on the documentation, applications can have multiple connections to a file database by calling sqlite3_open() repeatedly. Is there a way to have multiple connections to the ":memory:" database. > > > Question2: Why is sqlite3_exec( ) giving > Segmentation Fault error: > > Did you change you SQLite sources? I can't find any > information on > what libaimdb.so is and why it is used in your > environment. [zm]: I did not change sqlite3 sources. libaimdb.so is a library that I have compiled. This includes my (application) code and links with libsqlite3.so. > > > Pavel > > On Wed, Feb 9, 2011 at 8:07 PM, Zaryab Munir (zmunir) > <zmu...@cisco.com> > wrote: > > Hi, > > > > I am using an in-memory dbase in a multi-threaded > application and have > > the following two questions: > > I create dbase connections by each thread using > the API: > > { > > Sqlite3 *db =3D NULL; > > Sqlite3_open(":memory:", &db); > > When I try to use sqlite3_exec( ) I get > segmentation faults. > > } > > Question1: Can I have multiple connections > opened for each thread > > to > > the same in-memory dbase. According to the > documentation, the > > sqlite3_open( ) API can be used multiple times to > open multiple > > connections to the same database, but its not > clear is same applies > > to > > in-memory databases too. > > Question2: Why is sqlite3_exec( ) giving > Segmentation Fault error: > > segfault at 00002b90153ac905 rip 00002b90153ac905 > rsp > > 00007fff95b1d938 > > error 15 > > Segmentation fault > > > > > > Below is my code: > > uint32 aim_sql_open (char *ptr, sqlite3 **db) > > { > > > > int n; > > n =3D sqlite3_open(ptr,db); > > > > if( n !=3D SQLITE_OK ) > > { > > /* zz get the wt_id */ > > printf("Error opening database for > thread =3D %d.\n",n); > > return (0); > > } > > else { > > /* zz get the wt_id */ > > printf("Database open for thread =3D > %d ok.\n",n); > > } > > } > > NOTE: sqlite3_open( ) returns SQLITE_OK and the > value of db is > > updated. > > > > uint32 aim_db_init( ) { > > char dbname[10]; > > char tbname[13]; > > char statement[760], *db_err; > > sqlite3 *db =3D NULL; > > int n; > > bzero(dbname,10); > > bzero(tbname,13); > > bzero(statement,760); > > memcpy(dbname,DB_NAME,9); > > /* no need for dbname for inmemory dbase > */ > > n =3D aim_sql_open(":memory:", &db); > > memcpy(tbname,AIM_TABLE_NAME,12); > > if(!strcmp(tbname,"")) > > return(FALSE); > > sprintf(statement, "CREATE TABLE %s (%s > INTEGER PRIMARY KEY,%s > > DATE,%s INTEGER,%s INTEGER,%s INTEGER,%s TEXT,%s > TEXT,%s TEXT,%s > > INTEGER,%s INTEGER,%s INTEGER,%s INTEGER,%s > DATE,%s INTEGER,%s > > DATE,%s > > INTEGER,%s DATE,%s INTEGER,%s DATE,%s INTEGER,%s > INTEGER,%s DATE);", > > > > > tbname,COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10,COL11,COL12,CO > > > L13,COL14,COL15,COL16,COL17,COL18,COL19,COL20,COL21,COL22); > > n =3D sqlite3_exec(db, statement, NULL, 0, > &db_err); > > if( n !=3D SQLITE_OK ) > > { > > printf("Error executing: > %s\n",db_err); > > sqlite3_free(db_err); > > return (FALSE); > > } > > =20 > > > > The backtrace from GDB is as follows: > > Program received signal SIGSEGV, Segmentation > fault. > > [Switching to Thread 0x2b7070afe1a0 (LWP 699)] > > 0x00002b706fcc6905 in read () from > /usr/lib64/libaimdb.so > > (gdb) bt > > #0 0x00002b706fcc6905 in read () from > /usr/lib64/libaimdb.so > > #1 0x00002b70703a4120 in unixRandomness > (NotUsed=3D<value optimized > > = > > out>, > > nBuf=3D<value optimized out>, > zBuf=3D0x7fff3b203050 "") at > > ../sqlite3.c:27932 > > #2 0x00002b707035b0f5 in sqlite3_randomness > (N=3D4, pBuf=3D<value = > > optimized > > out>) > > at ../sqlite3.c:13876 > > #3 0x00002b707035b28f in writeJournalHdr > (pPager=3D0x62b788) > > at ../sqlite3.c:36096 > > #4 0x00002b707035b4fb in pager_write > (pPg=3D0x639e08) at > > ../sqlite3.c:39815 > > #5 0x00002b7070366195 in sqlite3PagerWrite > (pDbPage=3D0x7) at > > ../sqlite3.c:40151 > > #6 0x00002b7070368466 in newDatabase > (pBt=3D0x62b6d8) at > > ../sqlite3.c:47668 > > #7 0x00002b707037a18c in sqlite3BtreeBeginTrans > (p=3D0x62b678, = > > wrflag=3D1) > > at ../sqlite3.c:47798 > > #8 0x00002b707037fa78 in sqlite3Step > (p=3D0x63a988) at = > > ../sqlite3.c:63062 > > #9 0x00002b7070383803 in sqlite3_step > (pStmt=3D<value optimized > > out>) > > at ../sqlite3.c:58768 > > #10 0x00002b7070386592 in sqlite3_exec > (db=3D0x62b078, > > zSql=3D0x7fff3b203b10 "CREATE TABLE > aim_db_table (hash4ADandDC = > > INTEGER > > PRIMARY KEY,entrytime DATE,state INTEGER,bwgain > INTEGER,cctimestamp > > INTEGER,foreignkeyAD TEXT,popclass > TEXT,deviceclass TEXT,vdoBitrate > > INTEGER,qualityI"..., > > xCallback=3D0, pArg=3D0x0, > pzErrMsg=3D0x7fff3b203e38) at > > ../sqlite3.c:84165 > > #11 0x00002b706fac52ac in aim_db_init () at > aim_db_main.c:645 > > #12 0x000000000040566d in main () > > > > > > Regards, > > Zaryab > > > > > > _______________________________________________ > > sqlite-users mailing list > > sqlite-users@sqlite.org > > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users