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