mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Ensure that the busy-handler count is reset at the end of each sqlite3_file_control() and sqlite3_prepare() (and _v2() and _v3()).
FossilOrigin-Name: 5dd05940617fb05ee2faf212b15afc3a8e9695318eccb76761b37359fea681d1
This commit is contained in:
@ -131,5 +131,41 @@ do_multiclient_test tn {
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Check that even if the busy-handler fails (returns zero) within a
|
||||
# call to sqlite3_prepare() (or _v2(), or _v3()), it is still invoked
|
||||
# the next time an SQLITE_BUSY is encountered.
|
||||
#
|
||||
|
||||
do_multiclient_test tn {
|
||||
code1 {
|
||||
set ::busy_called 0
|
||||
proc busy {args} {
|
||||
if {$::busy_called} { return 1 }
|
||||
set ::busy_called 1
|
||||
return 0
|
||||
}
|
||||
db busy busy
|
||||
}
|
||||
|
||||
do_test 3.$tn.1 {
|
||||
sql2 {
|
||||
CREATE TABLE t1(x);
|
||||
BEGIN EXCLUSIVE;
|
||||
INSERT INTO t1 VALUES('x');
|
||||
}
|
||||
} {}
|
||||
|
||||
do_test 3.$tn.2 {
|
||||
set ::busy_called 0
|
||||
list [catch { sql1 { SELECT * FROM t1 } } msg] $msg $::busy_called
|
||||
} {1 {database is locked} 1}
|
||||
|
||||
do_test 3.$tn.3 {
|
||||
set ::busy_called 0
|
||||
list [catch { sql1 { SELECT * FROM t1 } } msg] $msg $::busy_called
|
||||
} {1 {database is locked} 1}
|
||||
}
|
||||
|
||||
finish_test
|
||||
|
||||
|
Reference in New Issue
Block a user