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

Fix some memory leak problems with corrupt.test and auto-vacuum databases. (CVS 2226)

FossilOrigin-Name: 6244252915fa312a6c4d192464023d95aaef4661
This commit is contained in:
danielk1977
2005-01-17 07:53:44 +00:00
parent f10519b45a
commit 5558a8a697
11 changed files with 59 additions and 43 deletions

View File

@@ -1,5 +1,5 @@
C Add\sincomplete,\spreliminary\sdrafts\sof\snew\sdocumentation.\s(CVS\s2225) C Fix\ssome\smemory\sleak\sproblems\swith\scorrupt.test\sand\sauto-vacuum\sdatabases.\s(CVS\s2226)
D 2005-01-17T03:42:52 D 2005-01-17T07:53:44
F Makefile.in 78d6d0af3725aef32468ac9923444d7645d21a28 F Makefile.in 78d6d0af3725aef32468ac9923444d7645d21a28
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1 F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1
@@ -29,9 +29,9 @@ F sqlite3.def dbaeb20c153e1d366e8f421b55a573f5dfc00863
F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a
F src/attach.c e49d09dad9f5f9fb10b4b0c1be5a70ae4c45e689 F src/attach.c e49d09dad9f5f9fb10b4b0c1be5a70ae4c45e689
F src/auth.c 3b81f2a42f48a62c2c9c9b0eda31a157c681edea F src/auth.c 3b81f2a42f48a62c2c9c9b0eda31a157c681edea
F src/btree.c da5adfeb27e7236e6e3a0a4f42de2caef0e9ad13 F src/btree.c 97101cce85304edbaedafc5f39ab12e2dc78b076
F src/btree.h 74d19cf40ab49fd69abe9e4e12a6c321ad86c497 F src/btree.h 74d19cf40ab49fd69abe9e4e12a6c321ad86c497
F src/build.c af1296e8a21a406b4f4c4f1e1365e075071219f3 F src/build.c 07d50fe1b167c77f183aedd59362d55e1f579163
F src/cursor.c f883813759742068890b1f699335872bfa8fdf41 F src/cursor.c f883813759742068890b1f699335872bfa8fdf41
F src/date.c f3d1f5cd1503dabf426a198f3ebef5afbc122a7f F src/date.c f3d1f5cd1503dabf426a198f3ebef5afbc122a7f
F src/delete.c 32277d2834e36c7538c047f14d643751c256c73b F src/delete.c 32277d2834e36c7538c047f14d643751c256c73b
@@ -72,7 +72,7 @@ F src/tokenize.c c1d124ec41422c9ec14360ea3a1f98ca4acf7cf1
F src/trigger.c 98f3b07c08ba01b34cff139ef9687883d325ae8e F src/trigger.c 98f3b07c08ba01b34cff139ef9687883d325ae8e
F src/update.c 0979397c41ac29c54fe0cc687a356d8629a633af F src/update.c 0979397c41ac29c54fe0cc687a356d8629a633af
F src/utf.c 9bece2c7b94d9002ab1bb900a7658c6f826b0f74 F src/utf.c 9bece2c7b94d9002ab1bb900a7658c6f826b0f74
F src/util.c 03ba0b0b83b14a2ddbc0aaac0681c92c8ebb0b0c F src/util.c 63e8d77659df88b292ac2a9dbd4766419b0ea158
F src/vacuum.c 1a9db113a027461daaf44724c71dd1ebbd064203 F src/vacuum.c 1a9db113a027461daaf44724c71dd1ebbd064203
F src/vdbe.c c5a711f146415634b72b05212bab9f222b0cce26 F src/vdbe.c c5a711f146415634b72b05212bab9f222b0cce26
F src/vdbe.h 067ca8d6750ba4f69a50284765e5883dee860181 F src/vdbe.h 067ca8d6750ba4f69a50284765e5883dee860181
@@ -82,7 +82,7 @@ F src/vdbeaux.c 6c294f7390880a7bb4795c9e0bc605b1a416579a
F src/vdbemem.c 62fe89471b656a922e9879be005abf690509ead3 F src/vdbemem.c 62fe89471b656a922e9879be005abf690509ead3
F src/where.c 3a0d08505e298242f6f151f019a05129a4f8704c F src/where.c 3a0d08505e298242f6f151f019a05129a4f8704c
F tclinstaller.tcl 36478c3bbfc5b93ceac42d94e3c736937b808432 F tclinstaller.tcl 36478c3bbfc5b93ceac42d94e3c736937b808432
F test/all.test d9c4775753de7321c0f93aac2c08b417378d509a F test/all.test 7f0988442ab811dfa41793b5b550f5828ce316f3
F test/alter.test 95c57a4f461fa81293e0dccef7f83889aadb169a F test/alter.test 95c57a4f461fa81293e0dccef7f83889aadb169a
F test/attach.test f39069efd4394422798f249df9a31489aa941ee1 F test/attach.test f39069efd4394422798f249df9a31489aa941ee1
F test/attach2.test eeb987770f4dbe68bd29afdbc2e8cff0142e6eb5 F test/attach2.test eeb987770f4dbe68bd29afdbc2e8cff0142e6eb5
@@ -113,7 +113,7 @@ F test/collate4.test 2d6e38e6b871073313f6d4eebfe1435c7173ebfa
F test/collate5.test 7999fb3122386bae38acd8ccd61e0b7c5a30e289 F test/collate5.test 7999fb3122386bae38acd8ccd61e0b7c5a30e289
F test/collate6.test 6c9470d1606ee3e564675b229653e320c49ec638 F test/collate6.test 6c9470d1606ee3e564675b229653e320c49ec638
F test/conflict.test c5b849b01cfbe0a4f63a90cba6f68e2fe3a75f87 F test/conflict.test c5b849b01cfbe0a4f63a90cba6f68e2fe3a75f87
F test/corrupt.test 4b289dfd45b5987a4f12bef9693c49e42b6e76ea F test/corrupt.test 6a0b5215968a6afc76d975a762f912cd16d03e72
F test/corrupt2.test cb1f813df7559de3021e01170af0bba31507a9a5 F test/corrupt2.test cb1f813df7559de3021e01170af0bba31507a9a5
F test/crash.test fa5d79ece85e8f6677bd81703db5f869a15963aa F test/crash.test fa5d79ece85e8f6677bd81703db5f869a15963aa
F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2 F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2
@@ -151,7 +151,7 @@ F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9
F test/main.test a60a1d234b5f5784097973bd395514ca56003ef1 F test/main.test a60a1d234b5f5784097973bd395514ca56003ef1
F test/malloc.test 4f34764cf8cfdfb0aa43face1ba933442a08eb2b F test/malloc.test 4f34764cf8cfdfb0aa43face1ba933442a08eb2b
F test/memdb.test 532aac7128a3da494cddc4461d76c6e3988f771b F test/memdb.test 532aac7128a3da494cddc4461d76c6e3988f771b
F test/memleak.test f1fa233f8295dd1d955a00d5e5ee857850f27f29 F test/memleak.test c0af09191af44a7501ec2494fdd079ac538a256c
F test/minmax.test e7048476940df0af11d0f2cf687572f557cd0b29 F test/minmax.test e7048476940df0af11d0f2cf687572f557cd0b29
F test/misc1.test 744f60d1025fa978708b96cb222a07a1feb1524a F test/misc1.test 744f60d1025fa978708b96cb222a07a1feb1524a
F test/misc2.test bc852f1622d98b610d1f3e2ceb36ed7271256050 F test/misc2.test bc852f1622d98b610d1f3e2ceb36ed7271256050
@@ -160,11 +160,11 @@ F test/misc4.test 7edc2542eadd98555c2d25c222b88a93124975ae
F test/misuse.test 600738a8e611989bc5f544303f5e311c5f228084 F test/misuse.test 600738a8e611989bc5f544303f5e311c5f228084
F test/notnull.test 7a08117a71e74b0321aaa937dbeb41a09d6eb1d0 F test/notnull.test 7a08117a71e74b0321aaa937dbeb41a09d6eb1d0
F test/null.test 5a945790ef21b24fd602fe2c7a23847b903f8687 F test/null.test 5a945790ef21b24fd602fe2c7a23847b903f8687
F test/pager.test 5ac7ce028a697283846d7e0c01622d253c8df1ef F test/pager.test f378832fd97648674feb6b452ae155b005289d41
F test/pager2.test 49c0f57c7da0b060f0486b85fdd074025caa694e F test/pager2.test 49c0f57c7da0b060f0486b85fdd074025caa694e
F test/pager3.test 647f696a9cf7409df00a1e0047c2eb55585a1b85 F test/pager3.test 647f696a9cf7409df00a1e0047c2eb55585a1b85
F test/pagesize.test 1b826d1608fd86d2303aa895b5586052ad07eba1 F test/pagesize.test 1b826d1608fd86d2303aa895b5586052ad07eba1
F test/pragma.test c1b4cdb2545131e4adec3250d02544688c6a5c9d F test/pragma.test 4a7a06bfa87fdbf2b9e5d1ab89c8af39ddae09b3
F test/printf.test 92ba4c510b4fc61120ffa4a01820446ed917ae57 F test/printf.test 92ba4c510b4fc61120ffa4a01820446ed917ae57
F test/progress.test 5ddba78cb6011fba36093973cfb3ac473b8fb96a x F test/progress.test 5ddba78cb6011fba36093973cfb3ac473b8fb96a x
F test/quick.test 91e5b8ae6663dc9e3e754b271f0384f0cae706e6 F test/quick.test 91e5b8ae6663dc9e3e754b271f0384f0cae706e6
@@ -212,7 +212,7 @@ F tool/lemon.c eb3b2bbefc0d442fa459f4f1924e598e804eca9c
F tool/lempar.c 1e61d2b6cb9d8affa264a13336bc0c088498caa4 F tool/lempar.c 1e61d2b6cb9d8affa264a13336bc0c088498caa4
F tool/memleak.awk 4e7690a51bf3ed757e611273d43fe3f65b510133 F tool/memleak.awk 4e7690a51bf3ed757e611273d43fe3f65b510133
F tool/memleak2.awk 9cc20c8e8f3c675efac71ea0721ee6874a1566e8 F tool/memleak2.awk 9cc20c8e8f3c675efac71ea0721ee6874a1566e8
F tool/memleak3.tcl 336eb50b0849dbf99b1d5462d9c37291b01b2b43 F tool/memleak3.tcl b8eb053190e95a55dc188896afb972e8108822d6
F tool/mkkeywordhash.c 408dccad57ed50dc67a9a1ee7fd258e0f0a07bd2 F tool/mkkeywordhash.c 408dccad57ed50dc67a9a1ee7fd258e0f0a07bd2
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e x F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e x
F tool/opcodeDoc.awk b3a2a3d5d3075b8bd90b7afe24283efdd586659c F tool/opcodeDoc.awk b3a2a3d5d3075b8bd90b7afe24283efdd586659c
@@ -269,7 +269,7 @@ F www/tclsqlite.tcl e73f8f8e5f20e8277619433f7970060ab01088fc
F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618 F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618
F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
F www/whentouse.tcl c3b50d3ac31c54be2a1af9b488a89d22f1e6e746 F www/whentouse.tcl c3b50d3ac31c54be2a1af9b488a89d22f1e6e746
P 1edfdcbf142b380172a26d094e6e4a3900db8463 P a01159e8cb93199763d191b739da2a43ec88aab3
R 96d57a6b3f846e4dbcc0ea017de3a1a3 R fbe60a34d6230243e3a7636baa8c41f3
U drh U danielk1977
Z d0fe1f7a9cab327ab894a50df6330b34 Z 7a02515a37f4bed08ff76d7a050b0eb0

View File

@@ -1 +1 @@
a01159e8cb93199763d191b739da2a43ec88aab3 6244252915fa312a6c4d192464023d95aaef4661

View File

@@ -9,7 +9,7 @@
** May you share freely, never taking more than you give. ** May you share freely, never taking more than you give.
** **
************************************************************************* *************************************************************************
** $Id: btree.c,v 1.240 2005/01/17 02:12:19 danielk1977 Exp $ ** $Id: btree.c,v 1.241 2005/01/17 07:53:44 danielk1977 Exp $
** **
** This file implements a external (disk-based) database using BTrees. ** This file implements a external (disk-based) database using BTrees.
** For a detailed discussion of BTrees, refer to ** For a detailed discussion of BTrees, refer to
@@ -495,15 +495,14 @@ static int ptrmapPut(Btree *pBt, Pgno key, u8 eType, Pgno parent){
if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){ if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){
TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent)); TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent));
rc = sqlite3pager_write(pPtrmap); rc = sqlite3pager_write(pPtrmap);
if( rc!=0 ){ if( rc==SQLITE_OK ){
return rc; pPtrmap[offset] = eType;
put4byte(&pPtrmap[offset+1], parent);
} }
pPtrmap[offset] = eType;
put4byte(&pPtrmap[offset+1], parent);
} }
sqlite3pager_unref(pPtrmap); sqlite3pager_unref(pPtrmap);
return SQLITE_OK; return rc;
} }
/* /*

View File

@@ -22,7 +22,7 @@
** COMMIT ** COMMIT
** ROLLBACK ** ROLLBACK
** **
** $Id: build.c,v 1.290 2004/12/14 03:34:34 drh Exp $ ** $Id: build.c,v 1.291 2005/01/17 07:53:44 danielk1977 Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -691,7 +691,9 @@ void sqlite3StartTable(
** index or table name in the same database. Issue an error message if ** index or table name in the same database. Issue an error message if
** it does. ** it does.
*/ */
if( SQLITE_OK!=sqlite3ReadSchema(pParse) ) return; if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
goto begin_table_error;
}
pTable = sqlite3FindTable(db, zName, db->aDb[iDb].zName); pTable = sqlite3FindTable(db, zName, db->aDb[iDb].zName);
if( pTable ){ if( pTable ){
sqlite3ErrorMsg(pParse, "table %T already exists", pName); sqlite3ErrorMsg(pParse, "table %T already exists", pName);

View File

@@ -14,7 +14,7 @@
** This file contains functions for allocating memory, comparing ** This file contains functions for allocating memory, comparing
** strings, and stuff like that. ** strings, and stuff like that.
** **
** $Id: util.c,v 1.126 2005/01/13 02:14:25 danielk1977 Exp $ ** $Id: util.c,v 1.127 2005/01/17 07:53:44 danielk1977 Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <stdarg.h> #include <stdarg.h>
@@ -27,11 +27,11 @@ void print_stack_trace(){
int i; int i;
int n = backtrace(bt, 30); int n = backtrace(bt, 30);
sqlite3DebugPrintf("STACK: "); fprintf(stderr, "STACK: ");
for(i=0; i<n;i++){ for(i=0; i<n;i++){
sqlite3DebugPrintf("%p ", bt[i]); fprintf(stderr, "%p ", bt[i]);
} }
sqlite3DebugPrintf("\n"); fprintf(stderr, "\n");
} }
#else #else
#define print_stack_trace() #define print_stack_trace()

View File

@@ -10,7 +10,7 @@
#*********************************************************************** #***********************************************************************
# This file runs all tests. # This file runs all tests.
# #
# $Id: all.test,v 1.29 2005/01/17 01:33:14 danielk1977 Exp $ # $Id: all.test,v 1.30 2005/01/17 07:53:44 danielk1977 Exp $
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl
@@ -61,9 +61,6 @@ set EXCLUDE {
# SQLITE_DEFAULT_AUTOVACUUM macro is defined to true (because they depend # SQLITE_DEFAULT_AUTOVACUUM macro is defined to true (because they depend
# on tables being allocated starting at page 2). # on tables being allocated starting at page 2).
# #
# Also corrupt.test doesn't work, because currently SQLite can't detect
# corruption in pointer-map pages.
#
ifcapable default_autovacuum { ifcapable default_autovacuum {
lappend EXCLUDE btree2.test lappend EXCLUDE btree2.test
lappend EXCLUDE btree4.test lappend EXCLUDE btree4.test
@@ -89,11 +86,6 @@ for {set Counter 0} {$Counter<$COUNT && $nErr==0} {incr Counter} {
if {[info exists Leak]} { if {[info exists Leak]} {
lappend LeakList $Leak lappend LeakList $Leak
} }
# Reset the sqlite3_temp_directory variable for the next run of tests:
sqlite3 db :memory:
db eval {PRAGMA temp_store_directory = ""}
db close
} }
# Do one last test to look for a memory leak in the library. This will # Do one last test to look for a memory leak in the library. This will

View File

@@ -13,7 +13,10 @@
# This file implements tests to make sure SQLite does not crash or # This file implements tests to make sure SQLite does not crash or
# segfault if it sees a corrupt database file. # segfault if it sees a corrupt database file.
# #
# $Id: corrupt.test,v 1.2 2005/01/16 23:21:00 drh Exp $ # $Id: corrupt.test,v 1.3 2005/01/17 07:53:44 danielk1977 Exp $
catch {file delete -force test.db}
catch {file delete -force test.db-journal}
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl

View File

@@ -10,7 +10,7 @@
#*********************************************************************** #***********************************************************************
# This file runs all tests. # This file runs all tests.
# #
# $Id: memleak.test,v 1.7 2004/09/03 18:38:46 drh Exp $ # $Id: memleak.test,v 1.8 2005/01/17 07:53:44 danielk1977 Exp $
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl
@@ -41,8 +41,17 @@ set EXCLUDE {
btree2.test btree2.test
trans.test trans.test
crash.test crash.test
corrupt.test autovacuum_crash.test
} }
# Test files btree2.test and btree4.test don't work if the
# SQLITE_DEFAULT_AUTOVACUUM macro is defined to true (because they depend
# on tables being allocated starting at page 2).
#
ifcapable default_autovacuum {
lappend EXCLUDE btree2.test
lappend EXCLUDE btree4.test
}
if {[sqlite3 -has-codec]} { if {[sqlite3 -has-codec]} {
# lappend EXCLUDE # lappend EXCLUDE
} }

View File

@@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The # This file implements regression tests for SQLite library. The
# focus of this script is page cache subsystem. # focus of this script is page cache subsystem.
# #
# $Id: pager.test,v 1.19 2005/01/13 11:07:54 danielk1977 Exp $ # $Id: pager.test,v 1.20 2005/01/17 07:53:44 danielk1977 Exp $
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
@@ -411,10 +411,14 @@ do_test pager-4.6.3 {
for {set i 1} {$i<5} {incr i} { for {set i 1} {$i<5} {incr i} {
set p [page_get $::p2 $i] set p [page_get $::p2 $i]
page_write $p "Page $i" page_write $p "Page $i"
page_unref $p
pager_commit $::p2 pager_commit $::p2
} }
pager_truncate $::p2 3 pager_truncate $::p2 3
} {} } {}
do_test pager-4.6.4 {
pager_close $::p2
} {}
do_test pager-4.99 { do_test pager-4.99 {
pager_close $::p1 pager_close $::p1

View File

@@ -12,7 +12,7 @@
# #
# This file implements tests for the PRAGMA command. # This file implements tests for the PRAGMA command.
# #
# $Id: pragma.test,v 1.31 2005/01/10 02:48:49 danielk1977 Exp $ # $Id: pragma.test,v 1.32 2005/01/17 07:53:44 danielk1977 Exp $
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl
@@ -709,6 +709,11 @@ do_test pragma-10.3 {
} ;# ifcapable trigger } ;# ifcapable trigger
# Reset the sqlite3_temp_directory variable for the next run of tests:
sqlite3 dbX :memory:
dbX eval {PRAGMA temp_store_directory = ""}
dbX close
finish_test finish_test

View File

@@ -13,7 +13,8 @@ exec `which tclsh` $0 "$@"
set doco " set doco "
This script is a tool to help track down memory leaks in the sqlite This script is a tool to help track down memory leaks in the sqlite
library. The library must be compiled with the preprocessor symbol library. The library must be compiled with the preprocessor symbol
SQLITE_DEBUG set to at least 2. It must be set to 3 to enable stack traces. SQLITE_MEMDEBUG set to at least 2. It must be set to 3 to enable stack
traces.
To use, run the leaky application and save the standard error output. To use, run the leaky application and save the standard error output.
Then, execute this program with the first argument the name of the Then, execute this program with the first argument the name of the
@@ -47,6 +48,7 @@ proc process_input {input_file array_name} {
set input [open $input_file] set input [open $input_file]
set MALLOC {([[:digit:]]+) malloc ([[:digit:]]+) bytes at 0x([[:xdigit:]]+)} set MALLOC {([[:digit:]]+) malloc ([[:digit:]]+) bytes at 0x([[:xdigit:]]+)}
# set STACK {^[[:digit:]]+: STACK: (.*)$}
set STACK {^STACK: (.*)$} set STACK {^STACK: (.*)$}
set FREE {[[:digit:]]+ free ([[:digit:]]+) bytes at 0x([[:xdigit:]]+)} set FREE {[[:digit:]]+ free ([[:digit:]]+) bytes at 0x([[:xdigit:]]+)}
set REALLOC {([[:digit:]]+) realloc ([[:digit:]]+) to ([[:digit:]]+)} set REALLOC {([[:digit:]]+) realloc ([[:digit:]]+) to ([[:digit:]]+)}