]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add the SQLITE_NOMEM_BKPT macro to enhance the ability to debug OOM errors.
authordrh <drh@noemail.net>
Mon, 15 Feb 2016 18:15:15 +0000 (18:15 +0000)
committerdrh <drh@noemail.net>
Mon, 15 Feb 2016 18:15:15 +0000 (18:15 +0000)
Only effective with compiling with SQLITE_DEBUG.

FossilOrigin-Name: 9b3454762d142113f5923d754ca6bd2edefbd362

1  2 
manifest
manifest.uuid
src/analyze.c
src/attach.c
src/build.c
src/main.c
src/sqliteInt.h
src/vdbemem.c
src/wal.c

diff --cc manifest
index d0def9f3e1193742bb7cc5ad2a505e56a1412650,50b9a8c74483ecf17dfa2e6ab7652daf8b0c1942..f81eb39f811a97128b459690a62a9b621348cfc8
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C Minor\scode\ssimplifications.
- D 2016-02-15T18:02:13.822
 -C Update\sa\scomment.
 -D 2016-02-14T00:14:35.173
++C Add\sthe\sSQLITE_NOMEM_BKPT\smacro\sto\senhance\sthe\sability\sto\sdebug\sOOM\serrors.\nOnly\seffective\swith\scompiling\swith\sSQLITE_DEBUG.
++D 2016-02-15T18:15:15.015
  F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
  F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
  F Makefile.msc 30f075dc4f27a07abb76088946b2944178d85347
@@@ -284,37 -284,37 +284,37 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7
  F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
  F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
  F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
 -F src/alter.c 1fbb01c26c64528088f1df8015992fefda387889
 -F src/analyze.c 8f89d016dab99d804caff7fec797a5970a16ca5e
 -F src/attach.c d9526ed44da598d6392f90ca03f1b613cafd582e
 +F src/alter.c 7603afbd61f55e7c644b8de4a42f33e58c0b7eaa
- F src/analyze.c b148441c7d35b5514ec1a66f9df97be8fa4c68a1
- F src/attach.c 07aa6e77c3906d46d4c36d7c81641dedd6adac91
++F src/analyze.c ab57b6763dd4c6170a20673d14882c033affd188
++F src/attach.c a3724c64de1099d85e30751213d285752aed9505
  F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240
- F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc
- F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf
+ F src/backup.c f60f0aa55d25d853ffde53d0b0370a7bb7ee41ce
+ F src/bitvec.c 3ee4c8b2c94ed3a7377256e18199e6ff5cf33f63
  F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73
- F src/btree.c 4c8caaeed7878aafdb607c3d2bcbc365bb0d19a1
+ F src/btree.c 474ad91c1684e9053da64fa88747a1cb0c10d034
  F src/btree.h 368ceeb4bd9312dc8df2ffd64b4b7dbcf4db5f8e
  F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5
- F src/build.c 7bc84362e4073841df1a24273e5bf87ddf46199f
 -F src/build.c f1c304326b0cd95ac556dd541ad16284face4f99
 -F src/callback.c ed6c2a4a712eb7287ff64e20e3c23265dfb8a7ce
++F src/build.c 88f185a37d1e087818fd7077d84d65c5babefdb1
 +F src/callback.c 0643b8fb06c95a8977beb201b268210d4b131a22
- F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
+ F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
  F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
 -F src/date.c ca17321bc17cca8f40e0843edea4fafff974998e
 +F src/date.c 0b73e681c11fca867fec554750c07fe0d4e417c1
- F src/dbstat.c b2ec6793eef97aebb4d171d490a4ffdfa9f2475c
+ F src/dbstat.c c845548d4346e606e2f2b7d2e714ace2b8a7dd1b
  F src/delete.c 48802aa3ee6339f576d074336d3ae1b5f40e240f
 -F src/expr.c fbf0706199aea23c54efe36b6932d8307c4eb872
 +F src/expr.c 9adb58153f6e943b703d43e9a1f67f77b5a75721
  F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
  F src/fkey.c 08edad1fce30f761f14b3997e89bad58f9f7f4e0
 -F src/func.c 86e55fee35b9577e485f47d9dd5c1d34cd513288
 -F src/global.c bd5a0af3f30b0c01be6db756c626cd3c33a3d260
 +F src/func.c 552d300265aed09eea21f68ac742a440550c0062
 +F src/global.c ded7b97efd16efda5062b65e857198e46c40e652
  F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
  F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
  F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
  F src/insert.c 9ca97272e9f74ed0efddf3b4350ee12740cebbef
- F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
- F src/legacy.c b1b0880fc474abfab89e737b0ecfde0bd7a60902
- F src/loadext.c 84996d7d70a605597d79c1f1d7b2012a5fd34f2b
- F src/main.c 17cfc8ba39fd86bc8201213140db53a65ff3cf2a
- F src/malloc.c 337e9808b5231855fe28857950f4f60ae42c417f
+ F src/journal.c fe3a3e2559ce3ce9d371afd30fbabbc074174575
+ F src/legacy.c 75d3023be8f0d2b99d60f905090341a03358c58e
+ F src/loadext.c 9e2a41adcaff16ebc1ebff1f336cbf33de55396f
 -F src/main.c 49f6d326bcecdbd2ee137abacd071439273e35ef
++F src/main.c 8d2fd210bfbf2f28becb9452641c5689760a68d4
+ F src/malloc.c 1443d1ad95d67c21d77af7ae3f44678252f0efec
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
  F src/mem2.c f1940d9e91948dd6a908fbb9ce3835c36b5d83c3
@@@ -343,20 -343,20 +343,20 @@@ F src/pcache.h 4d0ccaad264d360981ec5e6a
  F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051
  F src/pragma.c 80ee77226d0008d9188356a6cbbe6010866e1bee
  F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c
- F src/prepare.c c12b786713df3e8270c0f85f988c5359d8b4d87c
+ F src/prepare.c 22df6171aec1d86904ed2ad30c2348a5748aa04e
  F src/printf.c 63e6fb12bbe702dd664dc3703776c090383a5a26
  F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
 -F src/resolve.c 9f7ce3a3c087afb7597b7c916c99126ff3f12f0c
 +F src/resolve.c b8f7174e5f8c33c44ded3a25a973d0bb89228c20
  F src/rowset.c 9fe4b3ad7cc00944386bb600233d8f523de07a6e
- F src/select.c ff80004a9a6ece891a8d9327a88e7b6e2588ee6d
+ F src/select.c 1a7e23a3bb2edb9cdc46ab0cf7c1500109cf2531
  F src/shell.c 0367440658104bf2ce8d8a9a5a713a4b11c9acbe
  F src/sqlite.h.in f80c6ebd85588fc514bfedf3ecb00cec269cb410
  F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
  F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
- F src/sqliteInt.h ddd4a48f3ac2a423f003027e73bd8422bfa4d991
 -F src/sqliteInt.h 11685b0cab74fce0cde801f1525580cd261e3b11
++F src/sqliteInt.h e2ed86c6f5c3e503bbd07328737342afedfe48fc
  F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
  F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
- F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
+ F src/table.c 5226df15ab9179b9ed558d89575ea0ce37b03fc9
  F src/tclsqlite.c 13debcc6a5ca1217486f8903768c01114fbe8b58
  F src/test1.c 4f1b42699068b7806af3111786f5ad760c2c1ff7
  F src/test2.c 5586f43fcd9a1be0830793cf9d354082c261b25b
@@@ -410,24 -410,24 +410,24 @@@ F src/tokenize.c 2a234093ff16791ab3ec5a
  F src/treeview.c dc39ccf04e9331237388b9cb73289c9d87ea050b
  F src/trigger.c e14840ee0c3e549e758ec9bf3e4146e166002280
  F src/update.c a7eeeaffad59c6506f01303a071dac11de8269ca
- F src/utf.c 10cc2519e82e3369344d0969ad4b1a333dc86d18
+ F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
 -F src/util.c 49ce0a65306c1c51d61cb5bc214c71cb62452de6
 +F src/util.c 8073bbdab9cc7209f6741bd44264ede606cbadc6
- F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
- F src/vdbe.c c193299e595a13eba247738e22fce25c49346a6c
+ F src/vacuum.c feb1eabb20987983d9350cad98299b21fa811f52
+ F src/vdbe.c ad4d5b7ad65793886b09c925fb5d1d74ac78f1a4
  F src/vdbe.h c743791f723049db94f009e3e30958952bc2d512
  F src/vdbeInt.h 4b69d5451bcadd473e745af53ef1e8abfdce0a79
- F src/vdbeapi.c 9324f6baee1a1b2284c6543e98f916888a81e459
- F src/vdbeaux.c deae5d3bd45da0e57c7d9e1d7436333d142dc3bb
+ F src/vdbeapi.c bfc06382d5089944388a90e4f90bb1e975b3613d
+ F src/vdbeaux.c 3580de0325a05663195d8f8fddf48c6dd9a28522
  F src/vdbeblob.c 3b570b730109e8f653d9d2081649f6e7015113db
- F src/vdbemem.c e0dbb7bb9c2ec566c53c6575b4f51b3fcd426811
- F src/vdbesort.c ef3c6d1f1a7d44cf67bb2bee59ea3d1fe5bad174
 -F src/vdbemem.c 8ffbf660e6481800f1e26323c67e7ae3d5ef073d
++F src/vdbemem.c be8381ed6de54eb9cb9dfa802823cdeb5166d855
+ F src/vdbesort.c 74c22db608649fd7ed2d19d53eefb6efb14e9ee0
  F src/vdbetrace.c f75c5455d8cf389ef86a8bfdfd3177e0e3692484
- F src/vtab.c bef51b4f693d82b4b0184457faa8625654534091
+ F src/vtab.c c27c0232bbc6bd4b50320ea0ef988334cde7d1ca
  F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
- F src/wal.c 1dd3f1aeed5765be62f27d7d2e44d46a68d891ab
 -F src/wal.c 75a8e53f172472d361aa06ef361eeda721a2439d
++F src/wal.c 10deb6b43887662691e5f53d10b3c171c401169b
  F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c
  F src/walker.c 0f142b5bd3ed2041fc52d773880748b212e63354
- F src/where.c 984084584c10c41e46c89ac027a5cca991bc37e6
+ F src/where.c 5b67fb8035ae4697cf721db095f800ef8dff5f56
  F src/whereInt.h 78b6b4de94db84aecbdc07fe3e38f648eb391e9a
  F src/wherecode.c 791a784bbf8749d560fdb0b990b607bc4f44a38d
  F src/whereexpr.c de117970b29471177a6901d60ad83a194671dc03
@@@ -1427,7 -1427,7 +1427,8 @@@ F tool/vdbe_profile.tcl 246d0da094856d7
  F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
  F tool/warnings.sh ef6ebc6fd8d2dc35db3b622015c16a023d4fef4f
  F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
- P 7d49ed32a7262ec95d72ce520ab75402633386a1 a863729ccb75a56330460d3b7d558e639ad733d1
- R 93e8a74312f81836d6df6da0bc830b92
 -P 6a9c4a3ebfb7cc0738ef6634440ccab44a21ff28
 -R e3819c5f475544c6e34fa514747b2e7e
 -U mistachkin
 -Z 1f3637cc5e67ca5cc7786677aae5b8ad
++P c3b38efd50c3c07b6dee5dea4c1f95b37d1c0994 e9753d9a2c1269050f886e6cb9bc9cba0a8df6ce
++R b0fc853e4a1dd4125cb33093c5176aa5
++T +closed e9753d9a2c1269050f886e6cb9bc9cba0a8df6ce
 +U drh
- Z 4954abce0b42594f953ecc9e37768bc0
++Z 3f49c178a99d041b6eb9f7c9f8c2a0a3
diff --cc manifest.uuid
index 5d33c32cbb699f220aae1972182a823a60c47117,329a43c60448885ad881416637783f903424a124..60745fe15bd3709a129d4a9c9047af2e5f6400d5
@@@ -1,1 -1,1 +1,1 @@@
- c3b38efd50c3c07b6dee5dea4c1f95b37d1c0994
 -e9753d9a2c1269050f886e6cb9bc9cba0a8df6ce
++9b3454762d142113f5923d754ca6bd2edefbd362
diff --cc src/analyze.c
Simple merge
diff --cc src/attach.c
Simple merge
diff --cc src/build.c
Simple merge
diff --cc src/main.c
index 7d36ecf7d048abb92fec64c444cadce713bc254c,326d1ef68a08a2968d09ec980f34dd1748dcbc09..b8d095b4be291653e2dd05642492f404c1e8e6b7
@@@ -1640,10 -1642,10 +1640,10 @@@ int sqlite3CreateFunc
      }
    }
  
 -  p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1);
 +  p = sqlite3FindFunction(db, zFunctionName, nArg, (u8)enc, 1);
    assert(p || db->mallocFailed);
    if( !p ){
-     return SQLITE_NOMEM;
+     return SQLITE_NOMEM_BKPT;
    }
  
    /* If an older version of the function with a configured destructor is
@@@ -3211,28 -3214,41 +3211,33 @@@ int sqlite3_get_autocommit(sqlite3 *db)
  **   2.  Invoke sqlite3_log() to provide the source code location where
  **       a low-level error is first detected.
  */
++static int reportError(int iErr, int lineno, const char *zType){
++  sqlite3_log(iErr, "%s at line %d of [%.10s]",
++              zType, lineno, 20+sqlite3_sourceid());
++  return iErr;
++}
  int sqlite3CorruptError(int lineno){
    testcase( sqlite3GlobalConfig.xLog!=0 );
--  sqlite3_log(SQLITE_CORRUPT,
--              "database corruption at line %d of [%.10s]",
--              lineno, 20+sqlite3_sourceid());
--  return SQLITE_CORRUPT;
++  return reportError(SQLITE_CORRUPT, lineno, "database corruption");
  }
  int sqlite3MisuseError(int lineno){
    testcase( sqlite3GlobalConfig.xLog!=0 );
--  sqlite3_log(SQLITE_MISUSE, 
--              "misuse at line %d of [%.10s]",
--              lineno, 20+sqlite3_sourceid());
--  return SQLITE_MISUSE;
++  return reportError(SQLITE_MISUSE, lineno, "misuse");
  }
  int sqlite3CantopenError(int lineno){
    testcase( sqlite3GlobalConfig.xLog!=0 );
--  sqlite3_log(SQLITE_CANTOPEN, 
--              "cannot open file at line %d of [%.10s]",
--              lineno, 20+sqlite3_sourceid());
--  return SQLITE_CANTOPEN;
++  return reportError(SQLITE_CANTOPEN, lineno, "cannot open file");
  }
++#ifdef SQLITE_DEBUG
+ int sqlite3NomemError(int lineno){
+   testcase( sqlite3GlobalConfig.xLog!=0 );
 -  sqlite3_log(SQLITE_NOMEM, 
 -              "out of memory at line %d of [%.10s]",
 -              lineno, 20+sqlite3_sourceid());
 -  return SQLITE_NOMEM;
++  return reportError(SQLITE_NOMEM, lineno, "OOM");
+ }
+ int sqlite3IoerrnomemError(int lineno){
+   testcase( sqlite3GlobalConfig.xLog!=0 );
 -  sqlite3_log(SQLITE_IOERR_NOMEM, 
 -              "out of memory for I/O at line %d of [%.10s]",
 -              lineno, 20+sqlite3_sourceid());
 -  return SQLITE_IOERR_NOMEM;
++  return reportError(SQLITE_IOERR_NOMEM, lineno, "I/O OOM error");
+ }
++#endif
  
  #ifndef SQLITE_OMIT_DEPRECATED
  /*
diff --cc src/sqliteInt.h
index 37d9796829856e8b5e5106a1f833916327317021,abb827cedb155605d0e18d44edba82fe5f4a73e2..a45fb0229105cecde600a7ce351ab668f41f785c
@@@ -3177,6 -3169,10 +3177,15 @@@ int sqlite3CantopenError(int)
  #define SQLITE_CORRUPT_BKPT sqlite3CorruptError(__LINE__)
  #define SQLITE_MISUSE_BKPT sqlite3MisuseError(__LINE__)
  #define SQLITE_CANTOPEN_BKPT sqlite3CantopenError(__LINE__)
 -#define SQLITE_NOMEM_BKPT sqlite3NomemError(__LINE__)
 -#define SQLITE_IOERR_NOMEM_BKPT sqlite3IoerrnomemError(__LINE__)
++#ifdef SQLITE_DEBUG
++  int sqlite3NomemError(int);
++  int sqlite3IoerrnomemError(int);
++# define SQLITE_NOMEM_BKPT sqlite3NomemError(__LINE__)
++# define SQLITE_IOERR_NOMEM_BKPT sqlite3IoerrnomemError(__LINE__)
++#else
++# define SQLITE_NOMEM_BKPT SQLITE_NOMEM
++# define SQLITE_IOERR_NOMEM_BKPT SQLITE_IOERR_NOMEM
++#endif
  
  /*
  ** FTS3 and FTS4 both require virtual table support
diff --cc src/vdbemem.c
Simple merge
diff --cc src/wal.c
Simple merge