]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
If the file-system supports f2fs style atomic-writes, sync the directory
authordrh <>
Mon, 22 Sep 2025 18:24:37 +0000 (18:24 +0000)
committerdrh <>
Mon, 22 Sep 2025 18:24:37 +0000 (18:24 +0000)
after deleting a journal file in journal_mode=DELETE mode in
synchronous=NORMAL or synchronous=FULL modes (as well as synchronous=EXTRA).

FossilOrigin-Name: 0f856bd89a5a4f7d375b87a1f22afe3ebc70769d4709a26368cd550a194e7a53

manifest
manifest.tags [new file with mode: 0644]
manifest.uuid
src/pager.c

index 0af756deeaa0e400b7d0e749b90cd88c2cd41bd8..e1f01e006e8f6cbfb0089ae6360770198382185d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Increase\sthe\spatch\slevel\sfrom\s4\sto\s5.
-D 2025-08-06T19:20:36.404
+C If\sthe\sfile-system\ssupports\sf2fs\sstyle\satomic-writes,\ssync\sthe\sdirectory\nafter\sdeleting\sa\sjournal\sfile\sin\sjournal_mode=DELETE\smode\sin\nsynchronous=NORMAL\sor\ssynchronous=FULL\smodes\s(as\swell\sas\ssynchronous=EXTRA).
+D 2025-09-22T18:24:37.637
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -773,7 +773,7 @@ F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d87210
 F src/os_unix.c 04e054ab86d86a7be99ebe5265922687791a40df5afc781d059beb47f4a40acd
 F src/os_win.c b8d3cfdf2f40e2f9715b7d8df64f3c0c7ee18743a2dd0c4fc70c1d57fa1aadc7
 F src/os_win.h 4c247cdb6d407c75186c94a1e84d5a22cbae4adcec93fcae8d2bc1f956fd1f19
-F src/pager.c 23c0f17deb892da6b32fef1f465507df7ab5cd01d774288cb43695658a649259
+F src/pager.c 9c998c94955a04763accb0c324101942200a52fa7e85765225e25ef557f3c148
 F src/pager.h 6137149346e6c8a3ddc1eeb40aee46381e9bc8b0fcc6dda8a1efde993c2275b8
 F src/parse.y 619c3e92a54686c5e47923688c4b9bf7ec534a4690db5677acc28b299c403250
 F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
@@ -2209,8 +2209,9 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P cb41512386dd6e97869f56fc7be020682d203950a481bc9ae5b9094116a0c52a
-R e50edec62f0ba7ac5d383a666938d36a
+P 46c7ca9570c6a06e580835a29720feeaed6abcedea84c633728715ee227a89c7
+Q +e24b21699644a5b49181f2e63961b6a3fccb85605d0b6d109a6043341c194d99
+R 8d8f0ab4006fc7899b8b19d728131f2d
 U drh
-Z a061a2f7e97dd4cac3655521b34ab88c
+Z eac04ac611611c20027bcdcedafce95d
 # Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.tags b/manifest.tags
new file mode 100644 (file)
index 0000000..f8343fb
--- /dev/null
@@ -0,0 +1,2 @@
+branch branch-3.50
+tag branch-3.50
index 8b03aba9c95bd218c7d5d3017fabe1ff736d1a4d..2a796b7c75a77e190b67d8e41f2d669c105880a6 100644 (file)
@@ -1 +1 @@
-46c7ca9570c6a06e580835a29720feeaed6abcedea84c633728715ee227a89c7
+0f856bd89a5a4f7d375b87a1f22afe3ebc70769d4709a26368cd550a194e7a53
index 1850ba37bee6e4553aefc8ce6a192b89602da8f6..eed92d8f0da163070c48fa57d98db9bb6c466d42 100644 (file)
@@ -3612,14 +3612,27 @@ void sqlite3PagerSetFlags(
   unsigned pgFlags      /* Various flags */
 ){
   unsigned level = pgFlags & PAGER_SYNCHRONOUS_MASK;
-  if( pPager->tempFile ){
+  if( pPager->tempFile || level==PAGER_SYNCHRONOUS_OFF ){
     pPager->noSync = 1;
     pPager->fullSync = 0;
     pPager->extraSync = 0;
   }else{
-    pPager->noSync =  level==PAGER_SYNCHRONOUS_OFF ?1:0;
+    pPager->noSync =  0;
     pPager->fullSync = level>=PAGER_SYNCHRONOUS_FULL ?1:0;
-    pPager->extraSync = level==PAGER_SYNCHRONOUS_EXTRA ?1:0;
+
+    /* Set Pager.extraSync if "PRAGMA synchronous=EXTRA" is requested, or 
+    ** if the file-system supports F2FS style atomic writes. If this flag
+    ** is set, SQLite syncs the directory to disk immediately after deleting 
+    ** a journal file in "PRAGMA journal_mode=DELETE" mode.  */
+    if( level==PAGER_SYNCHRONOUS_EXTRA 
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+     || (sqlite3OsDeviceCharacteristics(pPager->fd) & SQLITE_IOCAP_BATCH_ATOMIC)
+#endif
+    ){
+      pPager->extraSync = 1;
+    }else{
+      pPager->extraSync = 0;
+    }
   }
   if( pPager->noSync ){
     pPager->syncFlags = 0;