1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

Change the definition of SQLITE_CONFIG_PAGECACHE and

SQLITE_CONFIG_SCRATCH to omit the magic "+4" in the buffer size
calculation. (CVS 5512)

FossilOrigin-Name: e7ed0fe640a39053009eac52a7f055b121750e57
This commit is contained in:
drh
2008-07-31 17:16:05 +00:00
parent 2462e32246
commit 0a60a384e7
5 changed files with 31 additions and 21 deletions

View File

@@ -1,5 +1,5 @@
C Documentation\supdates.\s(CVS\s5511) C Change\sthe\sdefinition\sof\sSQLITE_CONFIG_PAGECACHE\sand\nSQLITE_CONFIG_SCRATCH\sto\somit\sthe\smagic\s"+4"\sin\sthe\sbuffer\ssize\ncalculation.\s(CVS\s5512)
D 2008-07-31T14:47:55 D 2008-07-31T17:16:05
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in bbb62eecc851379aef5a48a1bf8787eb13e6ec06 F Makefile.in bbb62eecc851379aef5a48a1bf8787eb13e6ec06
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -116,7 +116,7 @@ F src/journal.c cffd2cd214e58c0e99c3ff632b3bee6c7cbb260e
F src/legacy.c 3635cc6a5889918086b3501de8287cbbecb55917 F src/legacy.c 3635cc6a5889918086b3501de8287cbbecb55917
F src/loadext.c 9ab55455f59dce0ae6388952216a1505ce7f9d13 F src/loadext.c 9ab55455f59dce0ae6388952216a1505ce7f9d13
F src/main.c 70d285dce241ad8daa320f78b060edb73bba637e F src/main.c 70d285dce241ad8daa320f78b060edb73bba637e
F src/malloc.c 9359e52a3e8519a0584d3c90335ca4a76b1d90a8 F src/malloc.c b1a337e2b903cd78cd7e529e2706ecf1ad95473d
F src/md5.c 008216bbb5d34c6fbab5357aa68575ad8a31516a F src/md5.c 008216bbb5d34c6fbab5357aa68575ad8a31516a
F src/mem1.c 3a7fe31d8290baa3bb203af72f7dfd6323966bcd F src/mem1.c 3a7fe31d8290baa3bb203af72f7dfd6323966bcd
F src/mem2.c 87381b143530cc377592e868bd548e881c2498a3 F src/mem2.c 87381b143530cc377592e868bd548e881c2498a3
@@ -144,7 +144,7 @@ F src/printf.c 2e984b2507291a7e16d89dc9bb60582904f6247d
F src/random.c 5c754319d38abdd6acd74601ee0105504adc508a F src/random.c 5c754319d38abdd6acd74601ee0105504adc508a
F src/select.c ef18af5624fc3189014e6b617a36562394740f91 F src/select.c ef18af5624fc3189014e6b617a36562394740f91
F src/shell.c 4b835fe734304ac22a3385868cd3790c1e4f7aa1 F src/shell.c 4b835fe734304ac22a3385868cd3790c1e4f7aa1
F src/sqlite.h.in 1980ef5f4f36ae986f3bf1d54ee322c967b69923 F src/sqlite.h.in 30af3a002a0b672aaae8f4a5deb0a2e9a4b699af
F src/sqlite3ext.h 1e3887c9bd3ae66cb599e922824b04cd0d0f2c3e F src/sqlite3ext.h 1e3887c9bd3ae66cb599e922824b04cd0d0f2c3e
F src/sqliteInt.h a4d6bcf383b1ff207f175f7e274a83d1283c73d7 F src/sqliteInt.h a4d6bcf383b1ff207f175f7e274a83d1283c73d7
F src/sqliteLimit.h f435e728c6b620ef7312814d660a81f9356eb5c8 F src/sqliteLimit.h f435e728c6b620ef7312814d660a81f9356eb5c8
@@ -168,7 +168,7 @@ F src/test_devsym.c 6012cb8e3acf812513511025a4fa5d626e0ba19b
F src/test_func.c 94c4424ed9869ecf2e2132662a04581bbec016f6 F src/test_func.c 94c4424ed9869ecf2e2132662a04581bbec016f6
F src/test_hexio.c 2f1122aa3f012fa0142ee3c36ce5c902a70cd12f F src/test_hexio.c 2f1122aa3f012fa0142ee3c36ce5c902a70cd12f
F src/test_loadext.c df8ab3a6481ddebbdf0d28ebac5d9e0790f7860f F src/test_loadext.c df8ab3a6481ddebbdf0d28ebac5d9e0790f7860f
F src/test_malloc.c 398f670f29e2d0c7b7717e2ea6386693b29afa28 F src/test_malloc.c 43668d9cb053be59eac02f42bd0ce6aa4a5f15c6
F src/test_md5.c 28209a4e2068711b5443c33104fe41f21d160071 F src/test_md5.c 28209a4e2068711b5443c33104fe41f21d160071
F src/test_mutex.c d3422d9f60cc1330249d102e74b333f0d24a0cb6 F src/test_mutex.c d3422d9f60cc1330249d102e74b333f0d24a0cb6
F src/test_onefile.c 243157b10275251c5dc2d6619aee2ff9ae22379c F src/test_onefile.c 243157b10275251c5dc2d6619aee2ff9ae22379c
@@ -614,7 +614,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1 F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
P f94239933e6f93d9780178b6f9a6b14ca791716a P e7fdd813ccdefab33aedbcf7f44e13b935dd3299
R cac4b89ea15db49a51f5d5c6e563f0a7 R 0da2bc60a3b7ef28cf0581731b3646dc
U drh U drh
Z 1c663e3103bc4c56c4b3a3ae279ff2de Z f0ba0aa5b2784db3a79cd7c3deea3b55

View File

@@ -1 +1 @@
e7fdd813ccdefab33aedbcf7f44e13b935dd3299 e7ed0fe640a39053009eac52a7f055b121750e57

View File

@@ -12,7 +12,7 @@
** **
** Memory allocation functions used throughout sqlite. ** Memory allocation functions used throughout sqlite.
** **
** $Id: malloc.c,v 1.31 2008/07/29 14:29:07 drh Exp $ ** $Id: malloc.c,v 1.32 2008/07/31 17:16:05 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <stdarg.h> #include <stdarg.h>
@@ -115,6 +115,7 @@ int sqlite3MallocInit(void){
if( sqlite3Config.pScratch && sqlite3Config.szScratch>=3000 if( sqlite3Config.pScratch && sqlite3Config.szScratch>=3000
&& sqlite3Config.nScratch>0 ){ && sqlite3Config.nScratch>0 ){
int i; int i;
sqlite3Config.szScratch -= 4;
mem0.aScratchFree = (u32*)&((char*)sqlite3Config.pScratch) mem0.aScratchFree = (u32*)&((char*)sqlite3Config.pScratch)
[sqlite3Config.szScratch*sqlite3Config.nScratch]; [sqlite3Config.szScratch*sqlite3Config.nScratch];
for(i=0; i<sqlite3Config.nScratch; i++){ mem0.aScratchFree[i] = i; } for(i=0; i<sqlite3Config.nScratch; i++){ mem0.aScratchFree[i] = i; }
@@ -124,8 +125,13 @@ int sqlite3MallocInit(void){
sqlite3Config.szScratch = 0; sqlite3Config.szScratch = 0;
} }
if( sqlite3Config.pPage && sqlite3Config.szPage>=512 if( sqlite3Config.pPage && sqlite3Config.szPage>=512
&& sqlite3Config.nPage>0 ){ && sqlite3Config.nPage>1 ){
int i; int i;
int overhead;
int sz = sqlite3Config.szPage;
int n = sqlite3Config.nPage;
overhead = (4*n + sz - 1)/sz;
sqlite3Config.nPage -= overhead;
mem0.aPageFree = (u32*)&((char*)sqlite3Config.pPage) mem0.aPageFree = (u32*)&((char*)sqlite3Config.pPage)
[sqlite3Config.szPage*sqlite3Config.nPage]; [sqlite3Config.szPage*sqlite3Config.nPage];
for(i=0; i<sqlite3Config.nPage; i++){ mem0.aPageFree[i] = i; } for(i=0; i<sqlite3Config.nPage; i++){ mem0.aPageFree[i] = i; }

View File

@@ -30,7 +30,7 @@
** the version number) and changes its name to "sqlite3.h" as ** the version number) and changes its name to "sqlite3.h" as
** part of the build process. ** part of the build process.
** **
** @(#) $Id: sqlite.h.in,v 1.383 2008/07/31 14:47:55 drh Exp $ ** @(#) $Id: sqlite.h.in,v 1.384 2008/07/31 17:16:05 drh Exp $
*/ */
#ifndef _SQLITE3_H_ #ifndef _SQLITE3_H_
#define _SQLITE3_H_ #define _SQLITE3_H_
@@ -1109,7 +1109,7 @@ struct sqlite3_mem_methods {
** <li> [sqlite3_memory_used()] ** <li> [sqlite3_memory_used()]
** <li> [sqlite3_memory_highwater()] ** <li> [sqlite3_memory_highwater()]
** <li> [sqlite3_soft_heap_limit()] ** <li> [sqlite3_soft_heap_limit()]
** <li> sqlite3_memory_status() ** <li> [sqlite3_status()]
** </ul> ** </ul>
** </dd> ** </dd>
** **
@@ -1117,8 +1117,10 @@ struct sqlite3_mem_methods {
** <dd>This option specifies a static memory buffer that SQLite can use for ** <dd>This option specifies a static memory buffer that SQLite can use for
** scratch memory. There are three arguments: A pointer to the memory, the ** scratch memory. There are three arguments: A pointer to the memory, the
** size of each scratch buffer (sz), and the number of buffers (N). The sz ** size of each scratch buffer (sz), and the number of buffers (N). The sz
** argument must be a multiple of 16. The first ** argument must be a multiple of 16. The sz parameter should be a few bytes
** argument should point to an allocation of at least (sz+4)*N bytes of memory. ** larger than the actual scratch space required due internal overhead.
** The first
** argument should point to an allocation of at least sz*N bytes of memory.
** SQLite will use no more than one scratch buffer at once per thread, so ** SQLite will use no more than one scratch buffer at once per thread, so
** N should be set to the expected maximum number of threads. The sz ** N should be set to the expected maximum number of threads. The sz
** parameter should be 6 times the size of the largest database page size. ** parameter should be 6 times the size of the largest database page size.
@@ -1132,11 +1134,13 @@ struct sqlite3_mem_methods {
** the database page cache. There are three arguments: A pointer to the ** the database page cache. There are three arguments: A pointer to the
** memory, the size of each page buffer (sz), and the number of pages (N). ** memory, the size of each page buffer (sz), and the number of pages (N).
** The sz argument must be a power of two between 512 and 32768. The first ** The sz argument must be a power of two between 512 and 32768. The first
** argument should point to an allocation of at least (sz+4)*N bytes of memory. ** argument should point to an allocation of at least sz*N bytes of memory.
** SQLite will use the memory provided by the first argument to satisfy its ** SQLite will use the memory provided by the first argument to satisfy its
** memory needs for the first N pages that it adds to cache. If additional ** memory needs for the first N pages that it adds to cache. If additional
** page cache memory is needed beyond what is provided by this option, then ** page cache memory is needed beyond what is provided by this option, then
** SQLite goes to [sqlite3_malloc()] for the additional storage space.</dd> ** SQLite goes to [sqlite3_malloc()] for the additional storage space.
** The implementation might use one or more of the N buffers to hold
** memory accounting information. </dd>
** **
** <dt>SQLITE_CONFIG_HEAP</dt> ** <dt>SQLITE_CONFIG_HEAP</dt>
** <dd>This option specifies a static memory buffer that SQLite will use ** <dd>This option specifies a static memory buffer that SQLite will use
@@ -6175,7 +6179,7 @@ int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
** **
** <dt>SQLITE_STATUS_PARSER_STACK</dt> ** <dt>SQLITE_STATUS_PARSER_STACK</dt>
** <dd>This parameter records the deepest parser stack. It is only ** <dd>This parameter records the deepest parser stack. It is only
** meaningful if SQLite is compiled with YYTRACKMAXSTACKDEPTH.</dd> ** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].</dd>
** </dl> ** </dl>
** **
** New status parameters may be added from time to time. ** New status parameters may be added from time to time.

View File

@@ -13,7 +13,7 @@
** This file contains code used to implement test interfaces to the ** This file contains code used to implement test interfaces to the
** memory allocation subsystem. ** memory allocation subsystem.
** **
** $Id: test_malloc.c,v 1.43 2008/07/29 14:29:07 drh Exp $ ** $Id: test_malloc.c,v 1.44 2008/07/31 17:16:05 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include "tcl.h" #include "tcl.h"
@@ -886,7 +886,7 @@ static int test_config_scratch(
buf = 0; buf = 0;
rc = sqlite3_config(SQLITE_CONFIG_SCRATCH, 0, 0, 0); rc = sqlite3_config(SQLITE_CONFIG_SCRATCH, 0, 0, 0);
}else{ }else{
buf = malloc( (sz+4)*N ); buf = malloc( sz*N );
rc = sqlite3_config(SQLITE_CONFIG_SCRATCH, buf, sz, N); rc = sqlite3_config(SQLITE_CONFIG_SCRATCH, buf, sz, N);
} }
pResult = Tcl_NewObj(); pResult = Tcl_NewObj();
@@ -926,7 +926,7 @@ static int test_config_pagecache(
buf = 0; buf = 0;
rc = sqlite3_config(SQLITE_CONFIG_PAGECACHE, 0, 0, 0); rc = sqlite3_config(SQLITE_CONFIG_PAGECACHE, 0, 0, 0);
}else{ }else{
buf = malloc( (sz+4)*N ); buf = malloc( sz*N );
rc = sqlite3_config(SQLITE_CONFIG_PAGECACHE, buf, sz, N); rc = sqlite3_config(SQLITE_CONFIG_PAGECACHE, buf, sz, N);
} }
pResult = Tcl_NewObj(); pResult = Tcl_NewObj();