Fix a race condtion in test_async.c. (CVS 4516)

FossilOrigin-Name: 5e3f7c3dec3e8d92b28a74293387b390fe6fc1fa
This commit is contained in:
danielk1977 2007-10-30 15:29:42 +00:00
parent dc1d9f1bd4
commit 5be7d5d139
3 changed files with 16 additions and 10 deletions

View File

@ -1,5 +1,5 @@
C Clarify\sthe\sbehavior\sof\ssqlite3_last_insert_rowid()\swhen\susing\nINSERT\sOR\sIGNORE.\s(CVS\s4515)
D 2007-10-27T16:25:16
C Fix\sa\srace\scondtion\sin\stest_async.c.\s(CVS\s4516)
D 2007-10-30T15:29:43
F Makefile.in 30c7e3ba426ddb253b8ef037d1873425da6009a8
F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@ -146,7 +146,7 @@ F src/test6.c a9fc983d32d6f262eab300d742e49ff239b0bdbd
F src/test7.c acec2256c7c2d279db5a8b5fa1a2a68fcc942c67
F src/test8.c f113aa3723a52113d0fa7c28155ecd37e7e04077
F src/test9.c b46c8fe02ac7cca1a7316436d8d38d50c66f4b2f
F src/test_async.c c5ea222c2bb0c3c33ab910d1b82622655dd50684
F src/test_async.c b273b3dc31712b2274815766c360a2bad907b8ab
F src/test_autoext.c 855157d97aa28cf84233847548bfacda21807436
F src/test_btree.c c1308ba0b88ab577fa56c9e493a09829dfcded9c
F src/test_config.c fd6ba4c62dd943e794f00f6ea1e9e32d97bf27f1
@ -584,7 +584,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
P deb8f56d3adea0025d28b8effabec7c7b7fe3026
R 27a5740f77270c1f94cbbc07f45db7e7
U drh
Z 09d045b0cf9283304b9f062260162563
P c0fa0c8ba80f4cd60bd06da7a032c6424ffd16f8
R 78bd8c196220170b3b4010cbc5e84b4f
U danielk1977
Z 9f1f861b176142b510f4edd5799736a8

View File

@ -1 +1 @@
c0fa0c8ba80f4cd60bd06da7a032c6424ffd16f8
5e3f7c3dec3e8d92b28a74293387b390fe6fc1fa

View File

@ -1151,7 +1151,7 @@ static void asyncEnable(int enable){
**
** Only one instance of this procedure may be running at a time.
*/
static void *asyncWriterThread(void *NotUsed){
static void *asyncWriterThread(void *pIsStarted){
sqlite3_vfs *pVfs = (sqlite3_vfs *)(async_vfs.pAppData);
AsyncWrite *p = 0;
int rc = SQLITE_OK;
@ -1160,6 +1160,7 @@ static void *asyncWriterThread(void *NotUsed){
if( pthread_mutex_trylock(&async.writerMutex) ){
return 0;
}
(*(int *)pIsStarted) = 1;
while( async.writerHaltNow==0 ){
int doNotFree = 0;
sqlite3_file *pBase = 0;
@ -1473,12 +1474,16 @@ static int testAsyncStart(
){
pthread_t x;
int rc;
rc = pthread_create(&x, 0, asyncWriterThread, 0);
volatile int isStarted = 0;
rc = pthread_create(&x, 0, asyncWriterThread, &isStarted);
if( rc ){
Tcl_AppendResult(interp, "failed to create the thread", 0);
return TCL_ERROR;
}
pthread_detach(x);
while( isStarted==0 ){
sched_yield();
}
return TCL_OK;
}
@ -1497,6 +1502,7 @@ static int testAsyncWait(
Tcl_Obj *CONST objv[]
){
int cnt = 10;
assert(async.writerHaltNow==0);
if( async.writerHaltNow==0 && async.writerHaltWhenIdle==0 ){
Tcl_AppendResult(interp, "would block forever", (char*)0);
return TCL_ERROR;