mirror of
https://github.com/sqlite/sqlite.git
synced 2025-12-24 14:17:58 +03:00
Enhance tests to ensure that blocking locks, and not calls to xSleep(), are being used by SQLITE_ENABLE_SETLK_TIMEOUT builds when they should be.
FossilOrigin-Name: c892242bb642f7a6a961e310ed8b4f1e140f8ee32c00f50021c6011c6e7e1476
This commit is contained in:
18
manifest
18
manifest
@@ -1,5 +1,5 @@
|
||||
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
|
||||
@@ -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 e9d334b8ef6e06ae61047d2bbbf129ecfd6e12a6bd94799792433fefb1eaead6
|
||||
F src/os_win.c 85c4d04e3d679a471c35172a58afa106040c26b9d6ba80be2efaf948c60be783
|
||||
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
|
||||
F src/pager.c 9656ad4e8331efb8a4f94f7a0c6440b98caea073950a367ea0c728a53b8e62c9
|
||||
F src/pager.h 4b1140d691860de0be1347474c51fee07d5420bd7f802d38cbab8ea4ab9f538a
|
||||
@@ -801,7 +801,7 @@ F src/test_backup.c bd901e3c116c7f3b3bbbd4aae4ce87d99b400c9cbb0a9e7b4610af451d97
|
||||
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
|
||||
@@ -832,7 +832,7 @@ F src/test_tclsh.c c01706ac60bd3176754d3ccd37da74c6ad97c2e14489f8ed71b497c1c0ac0
|
||||
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
|
||||
@@ -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 34c901443b31ab720afc463f5b236c86ca5c4134402573dce91aa0761de8db5a
|
||||
F test/walsetlk.test 18dcf274891bd93916ca4ba831078f89ef99388c6fdd495745443ed2c1b2f382
|
||||
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 22e4aeded0a6a691fc7026f3cd90836a289dfc994269f8576d01e28fa478902b
|
||||
R 0432cd81cc749bbfe4d694b5aab9fdf8
|
||||
P 70b0cfb0493e3fe56645648b462cb035d0d791f95b2913b7622f08c1090338c0
|
||||
R 9de6f4b05e49f722496a553eef28dd0a
|
||||
U dan
|
||||
Z 8a3542a0971ab31c1355fe946ed43a29
|
||||
Z b306d8cfc696ddcddaf2101fbec84ebb
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
@@ -1 +1 @@
|
||||
70b0cfb0493e3fe56645648b462cb035d0d791f95b2913b7622f08c1090338c0
|
||||
c892242bb642f7a6a961e310ed8b4f1e140f8ee32c00f50021c6011c6e7e1476
|
||||
|
||||
55
src/os_win.c
55
src/os_win.c
@@ -4044,10 +4044,13 @@ static void *winConvertFromUtf8Filename(const char *zFilename){
|
||||
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;
|
||||
@@ -4072,8 +4075,8 @@ static int winOpenFile(
|
||||
/* 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);
|
||||
@@ -4086,21 +4089,35 @@ static int winOpenFile(
|
||||
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;
|
||||
}
|
||||
@@ -4143,10 +4160,10 @@ static int winOpenSharedMemory(winFile *pDbFd){
|
||||
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. */
|
||||
@@ -4169,7 +4186,7 @@ static int winOpenSharedMemory(winFile *pDbFd){
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -787,6 +787,13 @@ Tcl_SetVar2(interp, "sqlite_options", "mergesort", "1", TCL_GLOBAL_ONLY);
|
||||
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), \
|
||||
|
||||
@@ -130,8 +130,9 @@ struct Testvfs {
|
||||
#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
|
||||
@@ -813,6 +814,10 @@ static int tvfsRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
|
||||
** 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);
|
||||
}
|
||||
|
||||
@@ -1197,6 +1202,7 @@ static int SQLITE_TCLAPI testvfs_obj_cmd(
|
||||
{ "xLock", TESTVFS_LOCK_MASK },
|
||||
{ "xCheckReservedLock", TESTVFS_CKLOCK_MASK },
|
||||
{ "xFileControl", TESTVFS_FCNTL_MASK },
|
||||
{ "xSleep", TESTVFS_SLEEP_MASK },
|
||||
};
|
||||
Tcl_Obj **apElem = 0;
|
||||
Tcl_Size nElem = 0;
|
||||
|
||||
@@ -80,6 +80,19 @@ db2 close
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
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;
|
||||
@@ -132,7 +145,6 @@ do_multiclient_test tn {
|
||||
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);
|
||||
@@ -178,7 +190,31 @@ do_multiclient_test tn {
|
||||
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
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user