AryaWu/sqlite
0
1# 2023 May 132#3# The author disclaims copyright to this source code. In place of4# a legal notice, here is a blessing:5#6# May you do good and not evil.7# May you find forgiveness for yourself and forgive others.8# May you share freely, never taking more than you give.9#10#***********************************************************************11#12 13set testdir [file dirname $argv0]14 15source $testdir/tester.tcl16source $testdir/lock_common.tcl17if {[run_thread_tests]==0} { finish_test ; return }18 19set testprefix thread320 21do_execsql_test 1.0 {22 CREATE TABLE t1(a, b);23 PRAGMA journal_mode = DELETE;24} {delete}25 26proc wait_for_var {varname} {27 if {0==[uplevel [list info exists $varname]]} {28 uplevel [list vwait $varname]29 }30 uplevel [list set $varname]31}32 33set nAttempt 25034 35do_test 1.1 {36 for {set i 0} {$i < $nAttempt} {incr i} {37 unset -nocomplain X38 unset -nocomplain Y39 40 sqlthread spawn X {41 sqlite3 dbI test.db42 dbI timeout 10043 set rc 144 set nBusy 045 while {$rc} {46 set rc [catch {47 dbI eval { INSERT INTO t1 VALUES(203, 'message') RETURNING a; }48 } msg]49 if {$rc} { incr nBusy }50 }51 dbI close52 set nBusy53 }54 55 sqlthread spawn Y {56 sqlite3 dbR test.db57 catch {58 dbR eval { SELECT count(*) FROM t1 }59 } msg60 dbR close61 set msg62 }63 64 wait_for_var X65 wait_for_var Y66 incr nTotalBusy $X67 }68 69 execsql { SELECT count(*) FROM t1 }70 set {} {}71} {}72 73do_execsql_test "1.Total BUSY errors: $nTotalBusy .2" {74 SELECT count(*) FROM t1;75} $nAttempt76 77finish_test78 