From 9c750fe3a3c70db6e596ebbf3a4bf8c442302231 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 9 Dec 2024 17:30:20 +0000 Subject: [PATCH] Test the case where a db connection blocks for a while and then successfully obtains the lock. FossilOrigin-Name: 9cbc97ff8411a672b572000e4509ac02b3d29911be5ce1bcf334ed8e2a91db77 --- manifest | 12 +++++----- manifest.uuid | 2 +- test/walsetlk.test | 55 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 76c631decd..4d1256ddc4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\stests\sto\sensure\sthat\sblocking\slocks,\sand\snot\scalls\sto\sxSleep(),\sare\sbeing\sused\sby\sSQLITE_ENABLE_SETLK_TIMEOUT\sbuilds\swhen\sthey\sshould\sbe. -D 2024-12-09T16:01:28.611 +C Test\sthe\scase\swhere\sa\sdb\sconnection\sblocks\sfor\sa\swhile\sand\sthen\ssuccessfully\sobtains\sthe\slock. +D 2024-12-09T17:30:20.069 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -2021,7 +2021,7 @@ F test/walro.test cb438d05ba0d191f10b688e39c4f0cd5b71569a1d1f4440e5bdf3c6880e08c F test/walro2.test 33955a6fd874dd9724005e17f77fef89d334b3171454a1256fe4941a96766cdc F test/walrofault.test c70cb6e308c443867701856cce92ad8288cd99488fa52afab77cca6cfd51af68 F test/walseh1.test bae700eb99519b6d5cd3f893c04759accc5a59c391d4189fe4dd6995a533442b -F test/walsetlk.test 18dcf274891bd93916ca4ba831078f89ef99388c6fdd495745443ed2c1b2f382 +F test/walsetlk.test 910a8ef8cc500b0be5cf818e2fff7a4505186d33bf08147dc23e38f78d0b2016 F test/walshared.test 42e3808582504878af237ea02c42ca793e8a0efaa19df7df26ac573370dbc7a3 F test/walslow.test 0c51843836c9dcf40a5ac05aa781bfb977b396ee2c872d92bd48b79d5dd9aa23 F test/walthread.test 14b20fcfa6ae152f5d8e12f5dc8a8a724b7ef189f5d8ef1e2ceab79f2af51747 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 70b0cfb0493e3fe56645648b462cb035d0d791f95b2913b7622f08c1090338c0 -R 9de6f4b05e49f722496a553eef28dd0a +P c892242bb642f7a6a961e310ed8b4f1e140f8ee32c00f50021c6011c6e7e1476 +R c5bbc43d548daaa55d847d34080f9ae5 U dan -Z b306d8cfc696ddcddaf2101fbec84ebb +Z 080db00c6e437599cb3a53612222f7cd # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 84434c2dcf..364baa9b7a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c892242bb642f7a6a961e310ed8b4f1e140f8ee32c00f50021c6011c6e7e1476 +9cbc97ff8411a672b572000e4509ac02b3d29911be5ce1bcf334ed8e2a91db77 diff --git a/test/walsetlk.test b/test/walsetlk.test index 23fcac59d2..1f1c0b7c32 100644 --- a/test/walsetlk.test +++ b/test/walsetlk.test @@ -219,8 +219,20 @@ do_multiclient_test tn { #------------------------------------------------------------------------- reset_db -sqlite3 db2 test.db + +testvfs tvfs -fullshm 1 +tvfs script xSleep_callback +tvfs filter xSleep + +set ::sleep_count 0 +proc xSleep_callback {xSleep nMs} { + after [expr $nMs / 1000] + incr ::sleep_count +} + +sqlite3 db2 test.db -vfs tvfs db2 timeout 1000 + do_execsql_test 3.0 { PRAGMA journal_mode = wal; CREATE TABLE x1(x, y); @@ -232,4 +244,45 @@ do_test 3.1 { list [catch { db2 eval {BEGIN EXCLUSIVE} } msg] $msg } {1 {database is locked}} +do_execsql_test 3.2 { + COMMIT; +} + +testfixture_nb done { + sqlite3 db test.db + db eval { + BEGIN EXCLUSIVE; + INSERT INTO x1 VALUES(3, 4); + } + after 2000 + db eval { + COMMIT + } +} + +after 500 +db2 timeout 5000 +do_test 3.3 { + set t [lindex [time { db2 eval { BEGIN EXCLUSIVE } }] 0] + expr ($t>1000000) +} {1} + +set bExpect 0 +if {$::sqlite_options(setlk_timeout)==1} { + set bExpect 1 +} +do_test 3.4 { + expr {$::sleep_count > 0} +} $bExpect + +do_execsql_test -db db2 3.5 { + INSERT INTO x1 VALUES(5, 6); + COMMIT; + SELECT * FROM x1; +} {1 2 3 4 5 6} + +db2 close +tvfs delete + finish_test + -- 2.47.2