------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-C Suppress\ssome\sharmless\scompiler\swarnings.
-D 2009-09-09T16:10:51
+C Trying\sto\sopen\sa\stransaction\sin\sone\sthread\sand\sclose\sit\sin\sanother\sis\sa\smisuse\swith\sLinuxThreads.\sDoing\sso\smay\scause\smemory\sand\sfile-descriptors\sto\sbe\sleaked.\sUpdate\san\sassert()\sand\ssome\stest\scases\sto\saccount\sfor\sthis.
+D 2009-09-09T18:46:53
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 73ddeec9dd10b85876c5c2ce1fdce627e1dcc7f8
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/os.h 00a1334a4eecee7f7bef79ac606b88d325119f21
F src/os_common.h 8c61457df58f1a4bd5f5adc3e90e01b37bf7afbc
F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5
-F src/os_unix.c 0b94e58153de8e4c1de92d66f2d1bb006a36b749
+F src/os_unix.c 4e5ce6099b6f9f711aced9283838f6a675194cc4
F src/os_win.c 58bb163f327e79726dd119344d908e4d98483c3f
F src/pager.c ebd0a8f2421e8f0ad5b78201440004bf3e1c96d8
F src/pager.h 11852d044c86cf5a9d6e34171fb0c4fcf1f6265f
F src/test1.c 83a685fa2c96f005934ed09146b53522b1aa533e
F src/test2.c 0de743ec8890ca4f09e0bce5d6d5a681f5957fec
F src/test3.c 2445c2beb5e7a0c91fd8136dc1339ec369a24898
-F src/test4.c f79ab52d27ff49b784b631a42e2ccd52cfd5c84c
+F src/test4.c b5fd530f02a6a0dbffb23be202168a690985dedd
F src/test5.c 162a1cea2105a2c460a3f39fa6919617b562a288
F src/test6.c 1a0a7a1f179469044b065b4a88aab9faee114101
F src/test7.c b94e68c2236de76889d82b8d7d8e00ad6a4d80b1
F test/thread004.test f51dfc3936184aaf73ee85f315224baad272a87f
F test/thread005.test bf5c374ca65dd89fd56c8fe511ccfb46875bda5e
F test/thread1.test 862dd006d189e8b0946935db17399dcac2f8ef91
-F test/thread2.test 91f105374f18a66e73a3254c28fe7c77af69bdea
+F test/thread2.test 6e0997f7beabb6a7e471bd18740ed04805c785f4
F test/thread_common.tcl b65e6b1d1d90dc885e10ad080896c6c56eef0819
F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b
F test/threadtest2.c ace893054fa134af3fc8d6e7cfecddb8e3acefb9
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P f3a0f23bc77f8c73924f1d371afae9a0f65bae67
-R b16c1b731cdc4658184133bff960f4e9
-U drh
-Z 9364e9d4ce92a22f7d14a7b57436a994
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-iD8DBQFKp9OPoxKgR168RlERAi6/AJ9Ts3lTzWavfx23Xorcbo4eQkzl9wCeJxVU
-IgsZnwseNwvtNHambzFTAso=
-=57r7
------END PGP SIGNATURE-----
+P f0c72a53c5d57d7487b48a06a40816153f47aaac
+R d486036c6384ca6df6f85368b01b5fb2
+U dan
+Z 4b9f16e8e4998457495bb5a33267dcee
-f0c72a53c5d57d7487b48a06a40816153f47aaac
\ No newline at end of file
+ef99eb57c536d82e7c19fd3d990c17793cc64a3f
\ No newline at end of file
assert( pOpen->pNext->pPrev==pOpen );
pOpen->pNext->pPrev = pOpen->pPrev;
}
- assert( !pOpen->pUnused );
+ assert( !pOpen->pUnused || threadsOverrideEachOthersLocks==0 );
+
+ /* If pOpen->pUnused is not null, then memory and file-descriptors
+ ** are leaked.
+ **
+ ** This will only happen if, under Linuxthreads, the user has opened
+ ** a transaction in one thread, then attempts to close the database
+ ** handle from another thread (without first unlocking the db file).
+ ** This is a misuse. */
sqlite3_free(pOpen);
}
}
return TCL_OK;
}
+/*
+** Usage: thread_db_put ID DB
+**
+*/
+static int tcl_thread_db_put(
+ void *NotUsed,
+ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
+ int argc, /* Number of arguments */
+ const char **argv /* Text of each argument */
+){
+ int i;
+ extern int sqlite3TestMakePointerStr(Tcl_Interp*, char*, void*);
+ extern void *sqlite3TestTextToPtr(const char *);
+ if( argc!=3 ){
+ Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
+ " ID DB", 0);
+ return TCL_ERROR;
+ }
+ i = parse_thread_id(interp, argv[1]);
+ if( i<0 ) return TCL_ERROR;
+ if( !threadset[i].busy ){
+ Tcl_AppendResult(interp, "no such thread", 0);
+ return TCL_ERROR;
+ }
+ thread_wait(&threadset[i]);
+ assert( !threadset[i].db );
+ threadset[i].db = (sqlite3*)sqlite3TestTextToPtr(argv[2]);
+ return TCL_OK;
+}
+
/*
** Usage: thread_stmt_get ID
**
{ "thread_finalize", (Tcl_CmdProc*)tcl_thread_finalize },
{ "thread_swap", (Tcl_CmdProc*)tcl_thread_swap },
{ "thread_db_get", (Tcl_CmdProc*)tcl_thread_db_get },
+ { "thread_db_put", (Tcl_CmdProc*)tcl_thread_db_put },
{ "thread_stmt_get", (Tcl_CmdProc*)tcl_thread_stmt_get },
};
int i;
thread_step A
set STMT [thread_stmt_get A]
set DB [thread_db_get A]
- thread_halt A
-} {}
-do_test thread2-3.21 {
sqlite3_step $STMT
} SQLITE_ROW
do_test thread2-3.22 {
# The unlock fails here. But because we never check the return
# code from sqlite3OsUnlock (because we cannot do anything about it
# if it fails) we do not realize that an error has occurred.
+ breakpoint
sqlite3_finalize $STMT
} SQLITE_OK
do_test thread2-3.25 {
- sqlite3_close $DB
-} SQLITE_OK
+ thread_db_put A $DB
+ thread_halt A
+} {}
do_test thread2-3.30 {
thread_create A test.db
thread_step A
thread_finalize A
set DB [thread_db_get A]
- thread_halt A
-} {}
-do_test thread2-3.31 {
set STMT [sqlite3_prepare $DB {INSERT INTO t1 VALUES(99,'error')} -1 TAIL]
sqlite3_step $STMT
} SQLITE_ERROR
sqlite3_finalize $STMT
} SQLITE_MISUSE
do_test thread2-3.33 {
- sqlite3_close $DB
-} SQLITE_OK
+ thread_db_put A $DB
+ thread_halt A
+} {}
# VERY important to set the override flag back to its true value.
#