On 10/28/15, Lohmann, Niels, Dr. (CQTN) <niels.lohmann at carmeq.com> wrote:
> Hi there,
>
> unfortunately, I cannot create a better stack trace on short notice.
>
> However, you may be able to reproduce the problem as follows:
>
> - Create an in-memory database.
> - Release it.
> - Create an in-memory database.
> - Release it.
>
> The first run succeeds, whereas the second one yields a crash when using
> "?cache=shared".
>
My test program is shown below. It works fine for me. Perhaps you
can suggest a modification that leads to a crash.
------------------------- begin attachment -----------------------------
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
/* Check a return code to verify it is SQLITE_OK. If it is not,
** print an error and panic. */
static void checkReturn(int rc){
if( rc!=SQLITE_OK ){
printf("Error: (%d) %s\n", rc, sqlite3_errstr(rc));
exit(1);
}
}
/* Print a single row of output from an sqlite3_exec() query */
static int execCallback(void *notUsed, int argc, char **argv, char **colv){
int i;
for(i=0; i<argc; i++){
printf("%s: %s\n", colv[i], argv[i]);
}
printf("\n");
return 0;
}
int main(int argc, char **argv){
sqlite3 *db1 = 0;
sqlite3 *db2 = 0;
int rc;
rc = sqlite3_open_v2("file::memory:?cache=shared", &db1,
SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE
| SQLITE_OPEN_URI, 0);
checkReturn(rc);
sqlite3_exec(db1,
"CREATE TABLE t1(a,b,c);"
"WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c wHERE x<10)"
" INSERT INTO t1(a,b,c) SELECT x, 100-x, printf('abc%02dxyz',x) FROM c;",
0, 0, 0);
rc = sqlite3_open_v2("file::memory:?cache=shared", &db2,
SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE
| SQLITE_OPEN_URI, 0);
checkReturn(rc);
sqlite3_exec(db2, "SELECT * FROM t1 LIMIT 3", execCallback, 0, 0);
printf("---- about to close and reopen db2\n");
sqlite3_close(db2);
rc = sqlite3_open_v2("file::memory:?cache=shared", &db2,
SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE
| SQLITE_OPEN_URI, 0);
checkReturn(rc);
sqlite3_exec(db2, "SELECT * FROM t1 LIMIT 3", execCallback, 0, 0);
return 0;
}
------------------------ end attachment -----------------------
--
D. Richard Hipp
drh at sqlite.org