]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Change an assert() into a NEVER(), since the condition is difficult to prove deferred-free-space
authordrh <drh@noemail.net>
Tue, 12 Feb 2019 00:58:10 +0000 (00:58 +0000)
committerdrh <drh@noemail.net>
Tue, 12 Feb 2019 00:58:10 +0000 (00:58 +0000)
with certainty.  Improved comment on the MemPage.nFree field.

FossilOrigin-Name: fec071b89df2cbafda365077bb54bc9999e12086f36d6cea8d125662b36638dc

manifest
manifest.uuid
src/btree.c
src/btreeInt.h

index 1a0efad9acc9fc52f39e1cb66e9fee781736cd84..cbed7e3fdec9978ba364500e8ea2ac8ff7b9dbca 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Do\snot\sinvoke\sbtreeComputeFreeSpace()\swhen\snot\snecessary.
-D 2019-02-11T22:50:01.937
+C Change\san\sassert()\sinto\sa\sNEVER(),\ssince\sthe\scondition\sis\sdifficult\sto\sprove\nwith\scertainty.\s\sImproved\scomment\son\sthe\sMemPage.nFree\sfield.
+D 2019-02-12T00:58:10.125
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 178d8eb6840771149cee40b322d1b3be30d330198c522c903c1b66fb5a1bfca4
@@ -455,9 +455,9 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df
 F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab
 F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
-F src/btree.c 70ac9dc86196416147baa94969c71372d1e3dacaca54602bda9c516b02f6da82
+F src/btree.c 7457f7813873877041ec7e04d76a041c81831704a73419882fbe1c222ce6a68c
 F src/btree.h 63b94fb38ce571c15eb6a3661815561b501d23d5948b2d1e951fbd7a2d04e8d3
-F src/btreeInt.h d7520b98e72f9a7e2a3140cc476df461fa8a34a3d56258184f8c26f70248cef9
+F src/btreeInt.h 6111c15868b90669f79081039d19e7ea8674013f907710baa3c814dc3f8bfd3f
 F src/build.c 906ca6663b9dcd413e72ae9c44dd51e596d8336b04d52e678a7501e71c20cab2
 F src/callback.c 25dda5e1c2334a367b94a64077b1d06b2553369f616261ca6783c48bcb6bda73
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
@@ -1804,7 +1804,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 16eb0fc8f8cce51eaa5305ebc9f3bd8c8d935dd3ebebab6820e5629f9292eec2
-R 42eb74538b26ea8a320f8b836f86ea2e
+P f11b0ed47402034378ded2c60b82841b81cd1319cdb72d1ef052faef29a5294d
+R b9fd86c9b0e983ebe73f0426098d02c6
 U drh
-Z 326f7ed87f29a92b24fc21835b66ed1d
+Z 3b166eeca4670760101eb14216736649
index 3f6605229bc58f359010b719fa4829985886af29..de8af99627865bb92a010279f26f1ed3cc6d4a3d 100644 (file)
@@ -1 +1 @@
-f11b0ed47402034378ded2c60b82841b81cd1319cdb72d1ef052faef29a5294d
\ No newline at end of file
+fec071b89df2cbafda365077bb54bc9999e12086f36d6cea8d125662b36638dc
\ No newline at end of file
index 43d6d161a910d8d6a2d784aff1bd04139d19c16a..4cbad04e4eae5afddfea9a5f95578fb9bbd5608c 100644 (file)
@@ -8295,7 +8295,7 @@ static int balance(BtCursor *pCur){
     int iPage = pCur->iPage;
     MemPage *pPage = pCur->pPage;
 
-    assert( pPage->nFree>=0 );
+    if( NEVER(pPage->nFree<0) && btreeComputeFreeSpace(pPage) ) break;
     if( iPage==0 ){
       if( pPage->nOverflow ){
         /* The root page of the b-tree is overfull. In this case call the
index 1f7a436b3e489a8b4d972f9e49874a2a77ada62a..ddd374efc9407d1e0c9633106309f7e4c591908f 100644 (file)
@@ -286,7 +286,7 @@ struct MemPage {
   u16 maxLocal;        /* Copy of BtShared.maxLocal or BtShared.maxLeaf */
   u16 minLocal;        /* Copy of BtShared.minLocal or BtShared.minLeaf */
   u16 cellOffset;      /* Index in aData of first cell pointer */
-  int nFree;           /* Number of free bytes on the page */
+  int nFree;           /* Number of free bytes on the page. -1 for unknown */
   u16 nCell;           /* Number of cells on this page, local and ovfl */
   u16 maskPage;        /* Mask for page offset */
   u16 aiOvfl[4];       /* Insert the i-th overflow cell before the aiOvfl-th