]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Have windows SQLITE_ENABLE_SETLK_TIMEOUT builds block indefinitely if the busy-timeou...
authordan <Dan Kennedy>
Wed, 15 Jan 2025 12:45:38 +0000 (12:45 +0000)
committerdan <Dan Kennedy>
Wed, 15 Jan 2025 12:45:38 +0000 (12:45 +0000)
FossilOrigin-Name: daefcafe799ad7613cbdff1fb1e9d40659892906875b28fbc112abd7679e48ea

manifest
manifest.uuid
src/os_win.c
test/walsetlk.test

index c0f1ef3f7e7c7d8b32d0353a3213f3ad458263d2..73dfd4e95988fb321f09841263c763614726df5c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Omit\scode\sto\slink\sall\swinShm\sobjects\sopen\son\sa\ssingle\snode\sinto\sa\slist.\sThis\sis\sno\slonger\srequired.
-D 2024-12-26T16:10:15.778
+C Have\swindows\sSQLITE_ENABLE_SETLK_TIMEOUT\sbuilds\sblock\sindefinitely\sif\sthe\sbusy-timeout\sis\sset\sto\s0x7FFFFFFF.
+D 2025-01-15T12:45:38.037
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -762,7 +762,7 @@ F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e
 F src/os_kv.c 4d39e1f1c180b11162c6dc4aa8ad34053873a639bac6baae23272fc03349986a
 F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d872107
 F src/os_unix.c d2edbd92b07a3f778c2defa8a2e9d75acceb6267bda56948c41e8cdda65224d6
-F src/os_win.c 7c00dbf94389f45bd401ba86eded909ab4046cbba2013ae601204dd64d7183ee
+F src/os_win.c 3dfb4a2464143d917d4a407c14706953a98a7ea211742a3039547df05bc3903b
 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
 F src/pager.c 2fdd489447aa6bb0f672973bacb801ced92225ca9a1c874ed9b856d2741dc54e
 F src/pager.h 6137149346e6c8a3ddc1eeb40aee46381e9bc8b0fcc6dda8a1efde993c2275b8
@@ -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 46b7ab42ac4498e549e4bb0b0e99f72ccd386bb20d8f3c2ee42363f09fab398e
+F test/walsetlk.test 9c5b92f9a20252540fedf9ffa6ee3d1b8af08ea4b80d0144d9b88e6c0c1de80d
 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 3e2893097c59820def88bb4739189c9c9a4f70a98a0a72b81959658f069715f6
-R c85f19f11ab416ccd96cccf1f405b727
+P b400ab4ba99d3ed7e90c93257d729563c630ef451017a702d42f322a4e57b663
+R 5c0bed857a50c43f376c97a6b2ec23d6
 U dan
-Z 1b63c8668961ff43a02dc419f96e1501
+Z 3a0a46e6f7f4d366b981494ea8c1d6b1
 # Remove this line to create a well-formed Fossil manifest.
index 5557d156b9199fde4fd00cb9a77c2134446cf06d..16fe6006a79211eb228cd4f0dae22a5e44115e5c 100644 (file)
@@ -1 +1 @@
-b400ab4ba99d3ed7e90c93257d729563c630ef451017a702d42f322a4e57b663
+daefcafe799ad7613cbdff1fb1e9d40659892906875b28fbc112abd7679e48ea
index eb2c0535596febab3ec5ad9096257de929fe1740..556b075f4931eb48321c9a94dcae2291be56e446 100644 (file)
@@ -2639,7 +2639,7 @@ static int winHandleLockTimeout(
     ** LockFileEx() may fail because the request is still pending. This can
     ** happen even if LOCKFILE_FAIL_IMMEDIATELY was specified.  */
     if( !ret && GetLastError()==ERROR_IO_PENDING ){
-      DWORD nDelay = (nMs ? nMs : INFINITE);
+      DWORD nDelay = (nMs==0 || nMs==0x7FFFFFFF ? INFINITE : nMs);
       DWORD res = osWaitForSingleObject(ovlp.hEvent, nDelay);
       if( res==WAIT_OBJECT_0 ){
         ret = TRUE;
index 150a4748afff2756b1f0ba10a00f1efb1926dc0b..d3fd050a632a7fe045e7fde5fcfbea9d940692dd 100644 (file)
@@ -297,12 +297,51 @@ do_test 3.5 {
   expr {$::sleep_count > 0}
 } $bExpect
 
-do_execsql_test -db db2 3.5 {
+do_execsql_test -db db2 3.6 {
   INSERT INTO x1 VALUES(5, 6);
   COMMIT;
   SELECT * FROM x1;
 } {1 2 3 4 5 6}
 
+# Launch a non-blocking testfixture process to write-lock the 
+# database for 2000 ms.
+testfixture_nb done {
+  sqlite3 db test.db
+  db eval {
+    BEGIN EXCLUSIVE;
+     INSERT INTO x1 VALUES(7, 8);
+  }
+  after 2000
+  db eval {
+    COMMIT
+  }
+}
+
+after 500 {set ok 1}
+vwait ok
+
+db2 timeout 0x7FFFFFFF
+do_test 3.7 {
+  set t [lindex [time { db2 eval { BEGIN EXCLUSIVE } }] 0]
+  expr ($t>1000000)
+} {1}
+
+# Set bExpect to true if calls to xSleep() are expected. Such calls are
+# expected unless this is an SQLITE_ENABLE_SETLK_TIMEOUT=1 build.
+set bExpect 1
+if {$::sqlite_options(setlk_timeout)==1} {
+  set bExpect 0
+}
+do_test 3.8 {
+  expr {$::sleep_count > 0}
+} $bExpect
+
+do_execsql_test -db db2 3.9 {
+  INSERT INTO x1 VALUES(9, 10);
+  COMMIT;
+  SELECT * FROM x1;
+} {1 2 3 4 5 6 7 8 9 10}
+
 db2 close
 tvfs delete