blob: 06f443d05f88fa9476c0185530c5e2cba9d31d04 (
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
#!/bin/sh
# PCP QA Test No. 828
# Use valgrind to track down memory leaks associated with
# # pmDestroyContext().
# See http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057
#
# Copyright (c) 2014 Ken McDonell. All Rights Reserved.
#
seq=`basename $0`
echo "QA output created by $seq"
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
_check_valgrind
status=1 # failure is the default!
$sudo rm -rf $tmp.* $seq.full
trap "cd $here; rm -rf $tmp.*; exit \$status" 0 1 2 3 15
_filter()
{
# free pdubuf[size]: 0xe61000[28672] 0xe5c000[17408]
sed \
-e '/free pdubuf/s/0x[0-9a-f]*\[[0-9]*\]/addr[size]/g'
}
cat >$tmp.suppress <<End-of-File
{
<pmid[], name[] realloc from qa main program>
Memcheck:Leak
fun:realloc
fun:main
}
{
<alloc list[] in pmNewContext>
Memcheck:Leak
fun:malloc
fun:pmNewContext
fun:main
}
{
<realloc list[] in pmNewContext>
Memcheck:Leak
fun:realloc
fun:pmNewContext
fun:main
}
{
<alloc list[] in pmNewContext via pmDupContext>
Memcheck:Leak
fun:malloc
fun:pmNewContext
fun:pmDupContext
fun:main
}
{
<realloc list[] in pmNewContext via pmDupContext>
Memcheck:Leak
fun:realloc
fun:pmNewContext
fun:pmDupContext
fun:main
}
{
<strdup TZ in pmNewZone>
Memcheck:Leak
fun:malloc
fun:strdup
fun:pmNewZone
fun:pmNewContextZone
fun:main
}
{
<zone[] alloc in pmNewZone>
Memcheck:Leak
fun:malloc
fun:pmNewZone
fun:pmNewContextZone
fun:main
}
{
<zone[] realloc in pmNewZone>
Memcheck:Leak
fun:malloc
fun:realloc
fun:pmNewZone
fun:pmNewContextZone
fun:main
}
{
<case 1 - buf hdr in __pmFindPDUBuf from pmGetArchiveEnd>
Memcheck:Leak
fun:malloc
fun:__pmFindPDUBuf
fun:__pmLogRead
fun:__pmGetArchiveEnd
fun:pmGetArchiveEnd
fun:main
}
{
<case 2 - buf hdr in __pmFindPDUBuf from pmGetArchiveEnd>
Memcheck:Leak
fun:malloc
fun:__pmFindPDUBuf
fun:__pmDecodeResult
fun:__pmLogRead
fun:__pmGetArchiveEnd
fun:pmGetArchiveEnd
fun:main
}
{
<case 1 - PDU buf alloc - cache_read>
Memcheck:Leak
fun:malloc
fun:__pmFindPDUBuf
fun:__pmDecodeResult
fun:__pmLogRead
...
fun:__pmLogFetchInterp
fun:__pmLogFetch
fun:pmFetch
fun:main
}
{
<case 2 - PDU buf alloc>
Memcheck:Leak
fun:memalign
fun:__pmFindPDUBuf
fun:__pmLogRead
fun:__pmGetArchiveEnd
fun:pmGetArchiveEnd
fun:main
}
{
<case 3 - PDU buf alloc>
Memcheck:Leak
fun:memalign
fun:__pmFindPDUBuf
fun:__pmDecodeResult
fun:__pmLogRead
fun:__pmGetArchiveEnd
fun:pmGetArchiveEnd
fun:main
}
{
<case 4 - PDU buf alloc - cache_read>
Memcheck:Leak
fun:memalign
fun:__pmFindPDUBuf
fun:__pmDecodeResult
fun:__pmLogRead
...
fun:__pmLogFetchInterp
fun:__pmLogFetch
fun:pmFetch
fun:main
}
{
<ipc[] table resize>
Memcheck:Leak
fun:malloc
fun:realloc
...
fun:__pmSetVersionIPC
fun:__pmLogChkLabel
fun:__pmLogChangeVol
fun:__pmLogOpen
fun:pmNewContext
fun:main
}
End-of-File
# real QA test starts here
for arg in "" -d
do
case "$arg"
in
'')
echo "=== pmNewContext ==="
;;
-d)
echo
echo "=== pmDupContext ==="
;;
esac
reachable_opt='--show-leak-kinds=all'
reachable_opt='--show-reachable=yes'
valgrind \
--leak-check=full --read-var-info=yes $reachable_opt \
--suppressions=$tmp.suppress --log-file=$tmp.valgrind \
--gen-suppressions=all \
2>$tmp.valgrind.err >$tmp.valgrind.out \
src/churnctx $arg -z -s 10 -a src/bug1057 kernel.all.load hinv.ncpu disk.dev.total
echo "=== std out ==="
cat $tmp.valgrind.out
echo "=== std err ==="
_filter < $tmp.valgrind.err
echo "=== valgrind report ===" >>$seq.full
cat $tmp.valgrind >>$seq.full
echo "=== filtered valgrind report ==="
_filter_valgrind <$tmp.valgrind
done
# success, all done
status=0
exit
|