The file_control_ofd_locks TCL command in testfixture distinguishes between
OFD locks unavailable on the platform and OFD locks not used.
FossilOrigin-Name: 87a9e9d776b6877a687711c1eb0e6ac318eca95dd3a9daae9ba08c2dc486424d
diff --git a/manifest b/manifest
index 0102934..baa5770 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C OFD\slocks\sare\snow\smostly\sworking,\sbut\sneed\sadditional\stests.
-D 2018-06-19T19:01:01.578
+C The\sfile_control_ofd_locks\sTCL\scommand\sin\stestfixture\sdistinguishes\sbetween\nOFD\slocks\sunavailable\son\sthe\splatform\sand\sOFD\slocks\snot\sused.
+D 2018-06-19T19:16:13.660
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F Makefile.in bfc40f350586923e0419d2ea4b559c37ec10ee4b6e210e08c14401f8e340f0da
@@ -479,7 +479,7 @@
F src/os.h 48388821692e87da174ea198bf96b1b2d9d83be5dfc908f673ee21fafbe0d432
F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586
-F src/os_unix.c 5713c9960370c3a60d7c95a12808aef1c25634291d78bd7bcebe0de90f594b30
+F src/os_unix.c 22faca3167b97188522df5082f606b94dc1141d4253bdfdaac9144087efd27fe
F src/os_win.c ac29c25cde4cfb4adacc59cdec4aa45698ca0e29164ea127859585ccd9faa354
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
F src/pager.c 1bb6a57fa0465296a4d6109a1a64610a0e7adde1f3acf3ef539a9d972908ce8f
@@ -505,7 +505,7 @@
F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e
F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
F src/tclsqlite.c 916a92de77ec5cbe27818ca194d8cf0c58aa7ad5b87527098f6aa5a6068800ce
-F src/test1.c badad960c27f27130e6146d11c4bb06b1f31ce0216c5ee7878b37ca32c717598
+F src/test1.c 05d8d168c11e419626d34d29e31851d8804987fc16e77f7b21a927215508611f
F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
F src/test4.c 18ec393bb4d0ad1de729f0b94da7267270f3d8e6
@@ -1731,7 +1731,7 @@
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P d849ade396d2dda4ed18f8e44d19ab218f94ef41a76a99f937238253e716dc05
-R 018a532db3427b0e69c05b2d8fcf6e5e
+P 4f1fb5c94b55c871f9ab70e19ee968f67082f70851c624028967ff11ac856e4a
+R d45744c23bc0ba6c95ae624be64a683c
U drh
-Z bf846025729235094c8cf265395fdfc1
+Z 4b06752b30319a8308f2262257913604
diff --git a/manifest.uuid b/manifest.uuid
index c5ba459..689180d 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-4f1fb5c94b55c871f9ab70e19ee968f67082f70851c624028967ff11ac856e4a
\ No newline at end of file
+87a9e9d776b6877a687711c1eb0e6ac318eca95dd3a9daae9ba08c2dc486424d
\ No newline at end of file
diff --git a/src/os_unix.c b/src/os_unix.c
index bc26a93..c697a6f 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -3961,10 +3961,12 @@
return SQLITE_OK;
}
#endif
+#if HAVE_OFD_LOCKS
case SQLITE_FCNTL_OFD_LOCKS: {
*(int*)pArg = UsesOfd(pFile);
return SQLITE_OK;
}
+#endif
#if SQLITE_MAX_MMAP_SIZE>0
case SQLITE_FCNTL_MMAP_SIZE: {
i64 newLimit = *(i64*)pArg;
diff --git a/src/test1.c b/src/test1.c
index 5eed09a..3ae7d08 100644
--- a/src/test1.c
+++ b/src/test1.c
@@ -5966,8 +5966,11 @@
/*
** tclcmd: file_control_ofd_locks DB
**
-** Run sqlite3_file_control() to query the OFD lock capability. Return
-** true if OFD locks are available and false if not.
+** Run sqlite3_file_control() to query the OFD lock capability. Return:
+**
+** 2 OFD locks are available and are used on DB
+** 1 OFD locks are available but DB is not using them
+** 0 OFD locks are not available
*/
static int SQLITE_TCLAPI file_control_ofd_locks(
ClientData clientData, /* Pointer to sqlite3_enable_XXX function */
@@ -5978,6 +5981,7 @@
sqlite3 *db;
int rc;
int b = 0;
+ const char *z;
if( objc!=2 ){
Tcl_AppendResult(interp, "wrong # args: should be \"",
@@ -5989,7 +5993,14 @@
}
b = 0;
rc = sqlite3_file_control(db,NULL,SQLITE_FCNTL_OFD_LOCKS,(void*)&b);
- Tcl_AppendResult(interp, (rc==SQLITE_OK && b) ? "1" : "0", (char*)0);
+ if( rc!=SQLITE_OK ){
+ z = "0";
+ }else if( b ){
+ z = "2";
+ }else{
+ z = "1";
+ }
+ Tcl_AppendResult(interp, z, (char*)0);
return TCL_OK;
}