blob: a24a901f50748e743dd202daf1ae8fd4118fc74c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# 2001 September 15
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
# This file runs all tests.
#
# $Id: memleak.test,v 1.10 2007/03/30 17:17:52 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
rename finish_test memleak_finish_test
proc finish_test {} {
catch {db close}
memleak_check
}
if {[file exists ./sqlite_test_count]} {
set COUNT [exec cat ./sqlite_test_count]
} else {
set COUNT 3
}
# LeakList will hold a list of the number of unfreed mallocs after
# each round of the test. This number should be constant. If it
# grows, it may mean there is a memory leak in the library.
#
set LeakList {}
set EXCLUDE {
all.test
quick.test
misuse.test
memleak.test
btree2.test
async.test
async2.test
trans.test
crash.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]} {
# lappend EXCLUDE
}
if {[llength $argv]>0} {
set FILELIST $argv
set argv {}
} else {
set FILELIST [lsort -dictionary [glob $testdir/*.test]]
}
foreach testfile $FILELIST {
set tail [file tail $testfile]
if {[lsearch -exact $EXCLUDE $tail]>=0} continue
set LeakList {}
for {set COUNTER 0} {$COUNTER<$COUNT} {incr COUNTER} {
source $testfile
if {[info exists Leak]} {
lappend LeakList $Leak
}
}
if {$LeakList!=""} {
puts -nonewline memory-leak-test-$tail...
incr_ntest
foreach x $LeakList {
if {$x!=[lindex $LeakList 0]} {
puts " failed! ($LeakList)"
fail_test memory-leak-test-$tail
break
}
}
puts " Ok"
}
}
memleak_finish_test
# Run the malloc tests and the misuse test after memory leak detection.
# Both tests leak memory.
#
#catch {source $testdir/misuse.test}
#catch {source $testdir/malloc.test}
memleak_finish_test
|