-C Fix\sfilectrl.test\sso\sthat\sit\sworks\swith\swinrt\sbuilds.
-D 2024-12-04T19:32:24.081
+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
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
F src/os_kv.c 4d39e1f1c180b11162c6dc4aa8ad34053873a639bac6baae23272fc03349986a
F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d872107
F src/os_unix.c d2edbd92b07a3f778c2defa8a2e9d75acceb6267bda56948c41e8cdda65224d6
-F src/os_win.c e9d334b8ef6e06ae61047d2bbbf129ecfd6e12a6bd94799792433fefb1eaead6
+F src/os_win.c 85c4d04e3d679a471c35172a58afa106040c26b9d6ba80be2efaf948c60be783
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
F src/pager.c 9656ad4e8331efb8a4f94f7a0c6440b98caea073950a367ea0c728a53b8e62c9
F src/pager.h 4b1140d691860de0be1347474c51fee07d5420bd7f802d38cbab8ea4ab9f538a
F src/test_bestindex.c 3401bee51665cbf7f9ed2552b5795452a8b86365e4c9ece745b54155a55670c6
F src/test_blob.c bcdf6a6c22d0bcc13c41479d63692ef413add2a4d30e1e26b9f74ab85b9fb4d5
F src/test_btree.c 28283787d32b8fa953eb77412ad0de2c9895260e4e5bd5a94b3c7411664f90d5
-F src/test_config.c fa43522c0cea6b2ec189a8ffd10031ca5698b934fedf392e8576785e20ac9df1
+F src/test_config.c 7f412406592794636d6226268e26d413850a9f799bc5f3c01afc2820b165fca8
F src/test_delete.c e2fe07646dff6300b48d49b2fee2fe192ed389e834dd635e3b3bac0ce0bf9f8f
F src/test_demovfs.c 3efa2adf4f21e10d95521721687d5ca047aea91fa62dd8cc22ac9e5a9c942383
F src/test_devsym.c 649434ed34d0b03fbd5a6b42df80f0f9a7e53f94dd1710aad5dd8831e91c4e86
F src/test_tclvar.c ae873248a0188459b1c16ca7cc431265dacce524399e8b46725c2b3b7e048424
F src/test_thread.c d7a8bcea7445f37cc2a1f7f81dd6059634f45e0c61bfe80182b02872fb0328bb
F src/test_vdbecov.c 5c426d9cd2b351f5f9ceb30cabf8c64a63bfcad644c507e0bd9ce2f6ae1a3bf3
-F src/test_vfs.c f298475e468c7e14945b20af885917181090c265aa3c4ade897849c9fbd396f2
+F src/test_vfs.c a19728c5930b5f5f415c664c57b029cba98c459fe70639aefcbfc4f70d544335
F src/test_windirent.c a895e2c068a06644eef91a7f0a32182445a893b9a0f33d0cdb4283dca2486ac1
F src/test_windirent.h da2e5b73c32d09905fbdd00f27cd802212a32a58ead882736fe4f5eb775ebc50
F src/test_window.c 6d80e11fba89a1796525e6f0048ff0c7789aa2c6b0b11c80827dc1437bd8ea72
F test/walro2.test 33955a6fd874dd9724005e17f77fef89d334b3171454a1256fe4941a96766cdc
F test/walrofault.test c70cb6e308c443867701856cce92ad8288cd99488fa52afab77cca6cfd51af68
F test/walseh1.test bae700eb99519b6d5cd3f893c04759accc5a59c391d4189fe4dd6995a533442b
-F test/walsetlk.test 34c901443b31ab720afc463f5b236c86ca5c4134402573dce91aa0761de8db5a
+F test/walsetlk.test 18dcf274891bd93916ca4ba831078f89ef99388c6fdd495745443ed2c1b2f382
F test/walshared.test 42e3808582504878af237ea02c42ca793e8a0efaa19df7df26ac573370dbc7a3
F test/walslow.test 0c51843836c9dcf40a5ac05aa781bfb977b396ee2c872d92bd48b79d5dd9aa23
F test/walthread.test 14b20fcfa6ae152f5d8e12f5dc8a8a724b7ef189f5d8ef1e2ceab79f2af51747
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 22e4aeded0a6a691fc7026f3cd90836a289dfc994269f8576d01e28fa478902b
-R 0432cd81cc749bbfe4d694b5aab9fdf8
+P 70b0cfb0493e3fe56645648b462cb035d0d791f95b2913b7622f08c1090338c0
+R 9de6f4b05e49f722496a553eef28dd0a
U dan
-Z 8a3542a0971ab31c1355fe946ed43a29
+Z b306d8cfc696ddcddaf2101fbec84ebb
# Remove this line to create a well-formed Fossil manifest.
-70b0cfb0493e3fe56645648b462cb035d0d791f95b2913b7622f08c1090338c0
+c892242bb642f7a6a961e310ed8b4f1e140f8ee32c00f50021c6011c6e7e1476
return zConverted;
}
-static int winOpenFile(
- const char *zUtf8,
- int *pbReadonly,
- HANDLE *ph
+/*
+** This function is used to open a handle on a *-shm file.
+*/
+static int winHandleOpen(
+ const char *zUtf8, /* File to open */
+ int *pbReadonly, /* IN/OUT: True for readonly handle */
+ HANDLE *ph /* OUT: New HANDLE for file */
){
int rc = SQLITE_OK;
void *zConverted = 0;
/* TODO: platforms.
** TODO: retry-on-ioerr.
*/
+ if( osIsNT() ){
#if SQLITE_OS_WINRT
- {
CREATEFILE2_EXTENDED_PARAMETERS extendedParameters;
memset(&extendedParameters, 0, sizeof(extendedParameters));
extendedParameters.dwSize = sizeof(extendedParameters);
OPEN_ALWAYS, /* dwCreationDisposition */
&extendedParameters
);
- }
#else
- h = osCreateFileW((LPCWSTR)zConverted, /* lpFileName */
- (GENERIC_READ | (bReadonly ? 0 : GENERIC_WRITE)), /* dwDesiredAccess */
- FILE_SHARE_READ | FILE_SHARE_WRITE, /* dwShareMode */
- NULL, /* lpSecurityAttributes */
- OPEN_ALWAYS, /* dwCreationDisposition */
- FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
- NULL
- );
+ h = osCreateFileW((LPCWSTR)zConverted, /* lpFileName */
+ (GENERIC_READ | (bReadonly ? 0 : GENERIC_WRITE)), /* dwDesiredAccess */
+ FILE_SHARE_READ | FILE_SHARE_WRITE, /* dwShareMode */
+ NULL, /* lpSecurityAttributes */
+ OPEN_ALWAYS, /* dwCreationDisposition */
+ FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
+ NULL
+ );
#endif
+ }else{
+ /* Due to pre-processor directives earlier in this file,
+ ** SQLITE_WIN32_HAS_ANSI is always defined if osIsNT() is false. */
+#ifdef SQLITE_WIN32_HAS_ANSI
+ h = osCreateFileA((LPCSTR)zConverted,
+ (GENERIC_READ | (bReadonly ? 0 : GENERIC_WRITE)), /* dwDesiredAccess */
+ FILE_SHARE_READ | FILE_SHARE_WRITE, /* dwShareMode */
+ NULL, /* lpSecurityAttributes */
+ OPEN_ALWAYS, /* dwCreationDisposition */
+ FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
+ NULL
+ );
+#endif
+ }
+
if( h==INVALID_HANDLE_VALUE ){
if( bReadonly==0 ){
bReadonly = 1;
- rc = winOpenFile(zUtf8, &bReadonly, &h);
+ rc = winHandleOpen(zUtf8, &bReadonly, &h);
}else{
rc = SQLITE_CANTOPEN_BKPT;
}
sqlite3FileSuffix3(pDbFd->zPath, pNew->zFilename);
/* Open a file-handle on the *-shm file for this connection. This file-handle
- ** is only used for locking. The mapping of the *-shm file is created using the
- ** shared file handle in winShmNode.hSharedShm. */
+ ** is only used for locking. The mapping of the *-shm file is created using
+ ** the shared file handle in winShmNode.hSharedShm. */
p->bReadonly = sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0);
- rc = winOpenFile(pNew->zFilename, &p->bReadonly, &p->hShm);
+ rc = winHandleOpen(pNew->zFilename, &p->bReadonly, &p->hShm);
/* Look to see if there is an existing winShmNode that can be used.
** If no matching winShmNode currently exists, then create a new one. */
if( rc==SQLITE_OK ){
HANDLE h = INVALID_HANDLE_VALUE;
pShmNode->isReadonly = p->bReadonly;
- rc = winOpenFile(pNew->zFilename, &pShmNode->isReadonly, &h);
+ rc = winHandleOpen(pNew->zFilename, &pShmNode->isReadonly, &h);
pShmNode->hSharedShm = h;
}
Tcl_SetVar2(interp, "sqlite_options", "windowfunc", "1", TCL_GLOBAL_ONLY);
#endif
+#if !defined(SQLITE_ENABLE_SETLK_TIMEOUT)
+ Tcl_SetVar2(interp, "sqlite_options", "setlk_timeout", "0", TCL_GLOBAL_ONLY);
+#else
+ Tcl_SetVar2(interp, "sqlite_options", "setlk_timeout",
+ STRINGVALUE(SQLITE_ENABLE_SETLK_TIMEOUT), TCL_GLOBAL_ONLY);
+#endif
+
#define LINKVAR(x) { \
static const int cv_ ## x = SQLITE_ ## x; \
Tcl_LinkVar(interp, "SQLITE_" #x, (char *)&(cv_ ## x), \
#define TESTVFS_LOCK_MASK 0x00040000
#define TESTVFS_CKLOCK_MASK 0x00080000
#define TESTVFS_FCNTL_MASK 0x00100000
+#define TESTVFS_SLEEP_MASK 0x00200000
-#define TESTVFS_ALL_MASK 0x001FFFFF
+#define TESTVFS_ALL_MASK 0x003FFFFF
#define TESTVFS_MAX_PAGES 1024
** actually slept.
*/
static int tvfsSleep(sqlite3_vfs *pVfs, int nMicro){
+ Testvfs *p = (Testvfs *)pVfs->pAppData;
+ if( p->pScript && (p->mask&TESTVFS_SLEEP_MASK) ){
+ tvfsExecTcl(p, "xSleep", Tcl_NewIntObj(nMicro), 0, 0, 0);
+ }
return sqlite3OsSleep(PARENTVFS(pVfs), nMicro);
}
{ "xLock", TESTVFS_LOCK_MASK },
{ "xCheckReservedLock", TESTVFS_CKLOCK_MASK },
{ "xFileControl", TESTVFS_FCNTL_MASK },
+ { "xSleep", TESTVFS_SLEEP_MASK },
};
Tcl_Obj **apElem = 0;
Tcl_Size nElem = 0;
#-------------------------------------------------------------------------
do_multiclient_test tn {
+
+ testvfs tvfs -fullshm 1
+ db close
+ sqlite3 db test.db -vfs tvfs
+ tvfs script xSleep_callback
+ tvfs filter xSleep
+
+ set ::sleep_count 0
+ proc xSleep_callback {xSleep nMs} {
+ after [expr $nMs / 1000]
+ incr ::sleep_count
+ }
+
do_test 2.$tn.1 {
sql1 {
PRAGMA journal_mode = wal;
set us [lindex [time { catch {db eval "PRAGMA wal_checkpoint=RESTART"} }] 0]
expr $us>1000000 && $us<4000000
} {1}
-
do_test 2.$tn.9 {
sql3 {
INSERT INTO t1 VALUES(11, 12);
set us [lindex [time { catch {db eval "PRAGMA wal_checkpoint=RESTART"} }] 0]
expr $us>1000000 && $us<4000000
} {1}
-
+
+ db close
+ tvfs delete
+
+ # Set bSleep to true if it is expected that the above used xSleep() to
+ # wait for locks. bSleep is true unless SQLITE_ENABLE_SETLK_TIMEOUT is
+ # set to 1 and either:
+ #
+ # * the OS is windows, or
+ # * the OS is unix and the tests were run with each connection
+ # in a separate process.
+ #
+ set bSleep 1
+ if {$::sqlite_options(setlk_timeout)==1} {
+ if {$::tcl_platform(platform)=="windows"} {
+ set bSleep 0
+ }
+ if {$::tcl_platform(platform)=="unix"} {
+ set bSleep [expr $tn==2]
+ }
+ }
+
+ do_test 2.$tn.15.$bSleep {
+ expr $::sleep_count > 0
+ } $bSleep
}
#-------------------------------------------------------------------------