git-svn: trunk@4354
aCaB authored on 2008/11/08 14:34:25... | ... |
@@ -1,3 +1,8 @@ |
1 |
+Sat Nov 8 05:27:43 CET 2008 (acab) |
|
2 |
+----------------------------------- |
|
3 |
+ * libclamav/mpool.c: slightly optimized (we're now faster and more compact |
|
4 |
+ than malloc() - it's just because we cheat more :) |
|
5 |
+ |
|
1 | 6 |
Fri Nov 7 19:37:38 EET 2008 (edwin) |
2 | 7 |
------------------------------------ |
3 | 8 |
* clamd/, libclamav/, libclamunrar/, unit_tests/: fix more compiler |
4 | 9 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,17 @@ |
0 |
+#!/usr/bin/perl |
|
1 |
+ |
|
2 |
+use strict; |
|
3 |
+use warnings; |
|
4 |
+ |
|
5 |
+my %frags = (); |
|
6 |
+ |
|
7 |
+while (<>) { |
|
8 |
+ chomp; |
|
9 |
+ next unless /^LibClamAV Warning: [mc]alloc .* size (\d+) .*$/; |
|
10 |
+ $frags{$1}++; |
|
11 |
+} |
|
12 |
+ |
|
13 |
+foreach (sort {$a<=>$b} (keys(%frags))) { |
|
14 |
+ print "$_, /* ($frags{$_}) */\n"; |
|
15 |
+} |
|
16 |
+ |
... | ... |
@@ -44,9 +44,8 @@ |
44 | 44 |
#include <assert.h> |
45 | 45 |
|
46 | 46 |
#define MPOOLMAGIC 0x5adeada5 |
47 |
-/*#define DEBUGMPOOL /\* DO NOT define *\/ */ |
|
47 |
+/* #define DEBUGMPOOL /\* DO NOT define *\/ */ |
|
48 | 48 |
#ifdef DEBUGMPOOL |
49 |
-FILE *lfd = NULL; |
|
50 | 49 |
#define spam(...) cli_warnmsg( __VA_ARGS__) |
51 | 50 |
#else |
52 | 51 |
#define spam |
... | ... |
@@ -68,85 +67,94 @@ FILE *lfd = NULL; |
68 | 68 |
|
69 | 69 |
#if SIZEOF_VOID_P==8 |
70 | 70 |
static const unsigned int fragsz[] = { |
71 |
-24, /* (33067) */ |
|
72 |
-32, /* (93970) */ |
|
73 |
-40, /* (731473) */ |
|
74 |
-48, /* (35342) */ |
|
75 |
-56, /* (6967) */ |
|
76 |
-64, /* (442053) */ |
|
77 |
-72, /* (2706) */ |
|
78 |
-80, /* (2281) */ |
|
79 |
-88, /* (3658) */ |
|
80 |
-96, /* (2620) */ |
|
81 |
-104, /* (3705) */ |
|
82 |
-112, /* (3722) */ |
|
83 |
-120, /* (4012) */ |
|
84 |
-128, /* (5161) */ |
|
85 |
-136, /* (22458) */ |
|
86 |
-144, /* (4339) */ |
|
87 |
-152, /* (4315) */ |
|
88 |
-160, /* (12195) */ |
|
89 |
-168, /* (18042) */ |
|
90 |
-/* 176, /\* (341) *\/ */ |
|
91 |
-/* 184, /\* (329) *\/ */ |
|
92 |
-192, /* (202) */ |
|
93 |
-/* 200, /\* (238) *\/ */ |
|
94 |
-/* 208, /\* (166) *\/ */ |
|
95 |
-/* 216, /\* (179) *\/ */ |
|
96 |
-224, /* (216) */ |
|
97 |
-/* 232, /\* (189) *\/ */ |
|
98 |
-/* 240, /\* (157) *\/ */ |
|
99 |
-/* 248, /\* (178) *\/ */ |
|
100 |
-256, /* (133) */ |
|
101 |
-/* 264, /\* (157) *\/ */ |
|
102 |
-/* 272, /\* (140) *\/ */ |
|
103 |
-/* 280, /\* (161) *\/ */ |
|
104 |
-/* 288, /\* (125) *\/ */ |
|
105 |
-/* 296, /\* (141) *\/ */ |
|
106 |
-304, /* (100) */ |
|
107 |
-/* 312, /\* (114) *\/ */ |
|
108 |
-/* 320, /\* (70) *\/ */ |
|
109 |
-/* 328, /\* (13) *\/ */ |
|
110 |
-/* 336, /\* (21) *\/ */ |
|
111 |
-/* 344, /\* (21) *\/ */ |
|
112 |
-352, /* (13) */ |
|
113 |
-/* 360, /\* (26) *\/ */ |
|
114 |
-/* 368, /\* (8) *\/ */ |
|
115 |
-/* 376, /\* (14) *\/ */ |
|
116 |
-/* 384, /\* (5) *\/ */ |
|
117 |
-/* 392, /\* (6) *\/ */ |
|
118 |
-/* 400, /\* (4) *\/ */ |
|
119 |
-/* 408, /\* (2) *\/ */ |
|
120 |
-/* 416, /\* (6) *\/ */ |
|
121 |
-424, /* (20) */ |
|
71 |
+16, /* (37189) */ |
|
72 |
+24, /* (94629) */ |
|
73 |
+32, /* (756188) */ |
|
74 |
+40, /* (35658) */ |
|
75 |
+48, /* (6989) */ |
|
76 |
+56, /* (454597) */ |
|
77 |
+64, /* (2736) */ |
|
78 |
+72, /* (2298) */ |
|
79 |
+80, /* (3664) */ |
|
80 |
+88, /* (2636) */ |
|
81 |
+96, /* (3715) */ |
|
82 |
+104, /* (3732) */ |
|
83 |
+112, /* (4021) */ |
|
84 |
+120, /* (5165) */ |
|
85 |
+128, /* (22788) */ |
|
86 |
+136, /* (4343) */ |
|
87 |
+144, /* (4321) */ |
|
88 |
+152, /* (12196) */ |
|
89 |
+160, /* (18044) */ |
|
90 |
+/* 168, /\* (344) *\/ */ |
|
91 |
+/* 176, /\* (335) *\/ */ |
|
92 |
+/* 184, /\* (204) *\/ */ |
|
93 |
+192, /* (226) */ |
|
94 |
+/* 200, /\* (185) *\/ */ |
|
95 |
+/* 208, /\* (181) *\/ */ |
|
96 |
+/* 216, /\* (217) *\/ */ |
|
97 |
+224, /* (172) */ |
|
98 |
+/* 232, /\* (175) *\/ */ |
|
99 |
+/* 240, /\* (178) *\/ */ |
|
100 |
+/* 248, /\* (135) *\/ */ |
|
101 |
+256, /* (140) */ |
|
102 |
+/* 264, /\* (158) *\/ */ |
|
103 |
+/* 272, /\* (161) *\/ */ |
|
104 |
+/* 280, /\* (126) *\/ */ |
|
105 |
+/* 288, /\* (141) *\/ */ |
|
106 |
+296, /* (101) */ |
|
107 |
+/* 304, /\* (97) *\/ */ |
|
108 |
+/* 312, /\* (85) *\/ */ |
|
109 |
+/* 320, /\* (14) *\/ */ |
|
110 |
+/* 328, /\* (21) *\/ */ |
|
111 |
+336, /* (21) */ |
|
112 |
+/* 344, /\* (12) *\/ */ |
|
113 |
+/* 352, /\* (10) *\/ */ |
|
114 |
+/* 360, /\* (7) *\/ */ |
|
115 |
+/* 368, /\* (14) *\/ */ |
|
116 |
+376, /* (21) */ |
|
117 |
+/* 384, /\* (6) *\/ */ |
|
118 |
+/* 392, /\* (4) *\/ */ |
|
119 |
+/* 400, /\* (3) *\/ */ |
|
120 |
+/* 408, /\* (6) *\/ */ |
|
121 |
+/* 416, /\* (5) *\/ */ |
|
122 |
+/* 424, /\* (5) *\/ */ |
|
122 | 123 |
/* 432, /\* (4) *\/ */ |
123 |
-/* 440, /\* (4) *\/ */ |
|
124 |
-/* 448, /\* (4) *\/ */ |
|
125 |
-/* 464, /\* (2) *\/ */ |
|
126 |
-/* 472, /\* (2) *\/ */ |
|
127 |
-/* 480, /\* (1) *\/ */ |
|
128 |
-/* 496, /\* (1) *\/ */ |
|
129 |
-/* 512, /\* (2) *\/ */ |
|
130 |
-528, /* (15) */ |
|
131 |
-/* 536, /\* (1) *\/ */ |
|
132 |
-/* 544, /\* (2) *\/ */ |
|
133 |
-/* 552, /\* (1) *\/ */ |
|
134 |
-/* 584, /\* (3) *\/ */ |
|
135 |
-/* 600, /\* (1) *\/ */ |
|
136 |
-/* 624, /\* (1) *\/ */ |
|
124 |
+440, /* (19) */ |
|
125 |
+/* 456, /\* (2) *\/ */ |
|
126 |
+/* 464, /\* (8) *\/ */ |
|
127 |
+/* 472, /\* (3) *\/ */ |
|
128 |
+/* 488, /\* (1) *\/ */ |
|
129 |
+/* 496, /\* (4) *\/ */ |
|
130 |
+/* 504, /\* (3) *\/ */ |
|
131 |
+/* 512, /\* (1) *\/ */ |
|
132 |
+/* 520, /\* (2) *\/ */ |
|
133 |
+/* 528, /\* (6) *\/ */ |
|
134 |
+/* 536, /\* (3) *\/ */ |
|
135 |
+544, /* (16) */ |
|
136 |
+/* 560, /\* (4) *\/ */ |
|
137 |
+/* 576, /\* (3) *\/ */ |
|
138 |
+/* 592, /\* (8) *\/ */ |
|
139 |
+/* 616, /\* (2) *\/ */ |
|
140 |
+/* 624, /\* (5) *\/ */ |
|
141 |
+/* 648, /\* (1) *\/ */ |
|
137 | 142 |
/* 656, /\* (1) *\/ */ |
138 |
-/* 784, /\* (2) *\/ */ |
|
139 |
-1040, /* (15) */ |
|
140 |
-/* 2064, /\* (7456) *\/ */ |
|
141 |
-2072, /* (14) */ |
|
142 |
-4112, /* (14) */ |
|
143 |
-8208, /* (9) */ |
|
144 |
-16400, /* (6) */ |
|
145 |
-32784, /* (4) */ |
|
146 |
-63512, /* (7) */ |
|
147 |
-134408, /* (2) */ |
|
148 |
-507984, /* (7) */ |
|
149 |
-1051040, /* (1) */ |
|
143 |
+/* 680, /\* (1) *\/ */ |
|
144 |
+/* 704, /\* (1) *\/ */ |
|
145 |
+/* 720, /\* (1) *\/ */ |
|
146 |
+/* 776, /\* (2) *\/ */ |
|
147 |
+1056, /* (15) */ |
|
148 |
+2056, /* (7585) */ |
|
149 |
+/* 2064, /\* (14) *\/ */ |
|
150 |
+2088, /* (14) */ |
|
151 |
+4128, /* (14) */ |
|
152 |
+8224, /* (9) */ |
|
153 |
+16416, /* (6) */ |
|
154 |
+32800, /* (4) */ |
|
155 |
+63504, /* (7) */ |
|
156 |
+136352, /* (1) */ |
|
157 |
+507976, /* (7) */ |
|
158 |
+1051032, /* (1) */ |
|
150 | 159 |
2097152 |
151 | 160 |
/* ^^ This shouldn't be reached but it's a good fall back |
152 | 161 |
* MAX_ALLOCATION is 184549376 but that's really not need here */ |
... | ... |
@@ -155,150 +163,149 @@ static const unsigned int fragsz[] = { |
155 | 155 |
#else |
156 | 156 |
|
157 | 157 |
static const unsigned int fragsz[] = { |
158 |
-12, /* (2297) */ |
|
159 |
-16, /* (30785) */ |
|
160 |
-20, /* (41460) */ |
|
161 |
-24, /* (69214) */ |
|
162 |
-28, /* (639488) */ |
|
163 |
-32, /* (107920) */ |
|
164 |
-36, /* (454213) */ |
|
165 |
-40, /* (11497) */ |
|
166 |
-44, /* (1688) */ |
|
167 |
-48, /* (5294) */ |
|
168 |
-52, /* (1496) */ |
|
169 |
-56, /* (3738) */ |
|
170 |
-60, /* (1719) */ |
|
171 |
-64, /* (918) */ |
|
172 |
-68, /* (956) */ |
|
173 |
-72, /* (1324) */ |
|
174 |
-76, /* (1905) */ |
|
175 |
-80, /* (1745) */ |
|
176 |
-84, /* (1053) */ |
|
177 |
-88, /* (1566) */ |
|
178 |
-92, /* (2081) */ |
|
179 |
-96, /* (20851) */ |
|
180 |
-100, /* (1882) */ |
|
181 |
-104, /* (1848) */ |
|
182 |
-108, /* (1931) */ |
|
183 |
-112, /* (2079) */ |
|
184 |
-116, /* (1736) */ |
|
185 |
-120, /* (3425) */ |
|
186 |
-124, /* (2115) */ |
|
187 |
-128, /* (1298) */ |
|
188 |
-132, /* (2307) */ |
|
189 |
-136, /* (2033) */ |
|
190 |
-140, /* (2837) */ |
|
191 |
-144, /* (1479) */ |
|
192 |
-148, /* (1607) */ |
|
193 |
-152, /* (10587) */ |
|
194 |
-156, /* (2719) */ |
|
195 |
-160, /* (15311) */ |
|
196 |
-164, /* (196) */ |
|
197 |
-168, /* (145) */ |
|
198 |
-172, /* (211) */ |
|
199 |
-176, /* (140) */ |
|
200 |
-180, /* (116) */ |
|
201 |
-/* 184, /\* (86) *\/ */ |
|
202 |
-188, /* (119) */ |
|
203 |
-192, /* (104) */ |
|
204 |
-/* 196, /\* (99) *\/ */ |
|
205 |
-/* 200, /\* (84) *\/ */ |
|
206 |
-/* 204, /\* (94) *\/ */ |
|
207 |
-/* 208, /\* (86) *\/ */ |
|
208 |
-212, /* (136) */ |
|
209 |
-/* 216, /\* (80) *\/ */ |
|
210 |
-/* 220, /\* (75) *\/ */ |
|
211 |
-/* 224, /\* (97) *\/ */ |
|
212 |
-/* 228, /\* (99) *\/ */ |
|
213 |
-/* 232, /\* (74) *\/ */ |
|
214 |
-236, /* (114) */ |
|
215 |
-/* 240, /\* (64) *\/ */ |
|
216 |
-/* 244, /\* (73) *\/ */ |
|
217 |
-/* 248, /\* (62) *\/ */ |
|
218 |
-/* 252, /\* (71) *\/ */ |
|
219 |
-/* 256, /\* (69) *\/ */ |
|
220 |
-/* 260, /\* (85) *\/ */ |
|
221 |
-/* 264, /\* (71) *\/ */ |
|
222 |
-268, /* (92) */ |
|
223 |
-/* 272, /\* (69) *\/ */ |
|
224 |
-/* 276, /\* (56) *\/ */ |
|
225 |
-/* 280, /\* (69) *\/ */ |
|
226 |
-/* 284, /\* (71) *\/ */ |
|
227 |
-/* 288, /\* (70) *\/ */ |
|
228 |
-/* 292, /\* (62) *\/ */ |
|
229 |
-/* 296, /\* (39) *\/ */ |
|
230 |
-/* 300, /\* (54) *\/ */ |
|
231 |
-/* 304, /\* (43) *\/ */ |
|
232 |
-/* 308, /\* (54) *\/ */ |
|
233 |
-312, /* (30) */ |
|
234 |
-/* 316, /\* (8) *\/ */ |
|
235 |
-/* 320, /\* (5) *\/ */ |
|
236 |
-/* 324, /\* (7) *\/ */ |
|
237 |
-/* 328, /\* (14) *\/ */ |
|
238 |
-/* 332, /\* (13) *\/ */ |
|
239 |
-/* 336, /\* (8) *\/ */ |
|
240 |
-/* 340, /\* (7) *\/ */ |
|
241 |
-/* 344, /\* (6) *\/ */ |
|
242 |
-/* 348, /\* (2) *\/ */ |
|
243 |
-/* 352, /\* (7) *\/ */ |
|
244 |
-/* 356, /\* (18) *\/ */ |
|
245 |
-/* 360, /\* (5) *\/ */ |
|
246 |
-364, /* (12) */ |
|
247 |
-/* 368, /\* (2) *\/ */ |
|
248 |
-/* 372, /\* (4) *\/ */ |
|
249 |
-/* 376, /\* (2) *\/ */ |
|
250 |
-/* 380, /\* (5) *\/ */ |
|
251 |
-/* 384, /\* (1) *\/ */ |
|
252 |
-/* 392, /\* (4) *\/ */ |
|
253 |
-/* 396, /\* (3) *\/ */ |
|
254 |
-/* 404, /\* (4) *\/ */ |
|
255 |
-/* 408, /\* (2) *\/ */ |
|
256 |
-/* 412, /\* (3) *\/ */ |
|
257 |
-/* 416, /\* (2) *\/ */ |
|
258 |
-/* 420, /\* (3) *\/ */ |
|
259 |
-/* 424, /\* (2) *\/ */ |
|
260 |
-428, /* (16) */ |
|
261 |
-/* 432, /\* (4) *\/ */ |
|
262 |
-/* 436, /\* (1) *\/ */ |
|
263 |
-/* 440, /\* (3) *\/ */ |
|
264 |
-/* 452, /\* (1) *\/ */ |
|
265 |
-/* 456, /\* (2) *\/ */ |
|
266 |
-/* 460, /\* (8) *\/ */ |
|
267 |
-/* 468, /\* (1) *\/ */ |
|
268 |
-/* 472, /\* (2) *\/ */ |
|
269 |
-/* 484, /\* (1) *\/ */ |
|
270 |
-/* 492, /\* (4) *\/ */ |
|
271 |
-/* 500, /\* (1) *\/ */ |
|
272 |
-/* 504, /\* (2) *\/ */ |
|
273 |
-/* 508, /\* (1) *\/ */ |
|
274 |
-/* 516, /\* (2) *\/ */ |
|
275 |
-/* 524, /\* (5) *\/ */ |
|
276 |
-532, /* (15) */ |
|
277 |
-/* 536, /\* (3) *\/ */ |
|
278 |
-/* 540, /\* (1) *\/ */ |
|
279 |
-/* 556, /\* (4) *\/ */ |
|
280 |
-/* 576, /\* (3) *\/ */ |
|
281 |
-/* 588, /\* (8) *\/ */ |
|
158 |
+8, /* (6381) */ |
|
159 |
+12, /* (30903) */ |
|
160 |
+16, /* (41616) */ |
|
161 |
+20, /* (69507) */ |
|
162 |
+24, /* (646497) */ |
|
163 |
+28, /* (108677) */ |
|
164 |
+32, /* (458074) */ |
|
165 |
+36, /* (11537) */ |
|
166 |
+40, /* (1690) */ |
|
167 |
+44, /* (5326) */ |
|
168 |
+48, /* (1505) */ |
|
169 |
+52, /* (3777) */ |
|
170 |
+56, /* (1730) */ |
|
171 |
+60, /* (943) */ |
|
172 |
+64, /* (963) */ |
|
173 |
+68, /* (1345) */ |
|
174 |
+72, /* (1909) */ |
|
175 |
+76, /* (1765) */ |
|
176 |
+80, /* (1060) */ |
|
177 |
+84, /* (1586) */ |
|
178 |
+88, /* (2082) */ |
|
179 |
+92, /* (21009) */ |
|
180 |
+96, /* (1886) */ |
|
181 |
+100, /* (1869) */ |
|
182 |
+104, /* (1936) */ |
|
183 |
+108, /* (2097) */ |
|
184 |
+112, /* (1736) */ |
|
185 |
+116, /* (3442) */ |
|
186 |
+120, /* (2117) */ |
|
187 |
+124, /* (1317) */ |
|
188 |
+128, /* (2307) */ |
|
189 |
+132, /* (2051) */ |
|
190 |
+136, /* (2839) */ |
|
191 |
+140, /* (1497) */ |
|
192 |
+144, /* (1607) */ |
|
193 |
+148, /* (10604) */ |
|
194 |
+152, /* (2719) */ |
|
195 |
+156, /* (15328) */ |
|
196 |
+160, /* (197) */ |
|
197 |
+/* 164, /\* (161) *\/ */ |
|
198 |
+/* 168, /\* (195) *\/ */ |
|
199 |
+172, /* (156) */ |
|
200 |
+/* 176, /\* (132) *\/ */ |
|
201 |
+/* 180, /\* (86) *\/ */ |
|
202 |
+/* 184, /\* (120) *\/ */ |
|
203 |
+188, /* (122) */ |
|
204 |
+/* 192, /\* (84) *\/ */ |
|
205 |
+/* 196, /\* (84) *\/ */ |
|
206 |
+/* 200, /\* (95) *\/ */ |
|
207 |
+/* 204, /\* (86) *\/ */ |
|
208 |
+208, /* (137) */ |
|
209 |
+/* 212, /\* (95) *\/ */ |
|
210 |
+/* 216, /\* (75) *\/ */ |
|
211 |
+/* 220, /\* (97) *\/ */ |
|
212 |
+/* 224, /\* (84) *\/ */ |
|
213 |
+/* 228, /\* (74) *\/ */ |
|
214 |
+232, /* (114) */ |
|
215 |
+/* 236, /\* (79) *\/ */ |
|
216 |
+/* 240, /\* (73) *\/ */ |
|
217 |
+/* 244, /\* (62) *\/ */ |
|
218 |
+/* 248, /\* (71) *\/ */ |
|
219 |
+/* 252, /\* (69) *\/ */ |
|
220 |
+256, /* (70) */ |
|
221 |
+/* 260, /\* (86) *\/ */ |
|
222 |
+/* 264, /\* (92) *\/ */ |
|
223 |
+/* 268, /\* (69) *\/ */ |
|
224 |
+/* 272, /\* (56) *\/ */ |
|
225 |
+/* 276, /\* (70) *\/ */ |
|
226 |
+280, /* (71) */ |
|
227 |
+/* 284, /\* (70) *\/ */ |
|
228 |
+/* 288, /\* (62) *\/ */ |
|
229 |
+/* 292, /\* (54) *\/ */ |
|
230 |
+/* 296, /\* (54) *\/ */ |
|
231 |
+/* 300, /\* (43) *\/ */ |
|
232 |
+/* 304, /\* (39) *\/ */ |
|
233 |
+308, /* (30) */ |
|
234 |
+/* 312, /\* (9) *\/ */ |
|
235 |
+/* 316, /\* (5) *\/ */ |
|
236 |
+/* 320, /\* (7) *\/ */ |
|
237 |
+/* 324, /\* (14) *\/ */ |
|
238 |
+/* 328, /\* (13) *\/ */ |
|
239 |
+332, /* (23) */ |
|
240 |
+/* 336, /\* (6) *\/ */ |
|
241 |
+/* 340, /\* (6) *\/ */ |
|
242 |
+/* 344, /\* (3) *\/ */ |
|
243 |
+/* 348, /\* (7) *\/ */ |
|
244 |
+/* 352, /\* (3) *\/ */ |
|
245 |
+/* 356, /\* (4) *\/ */ |
|
246 |
+/* 360, /\* (12) *\/ */ |
|
247 |
+/* 364, /\* (2) *\/ */ |
|
248 |
+/* 368, /\* (3) *\/ */ |
|
249 |
+372, /* (17) */ |
|
250 |
+/* 376, /\* (5) *\/ */ |
|
251 |
+/* 380, /\* (1) *\/ */ |
|
252 |
+/* 388, /\* (4) *\/ */ |
|
253 |
+/* 392, /\* (3) *\/ */ |
|
254 |
+/* 400, /\* (4) *\/ */ |
|
255 |
+/* 404, /\* (2) *\/ */ |
|
256 |
+/* 408, /\* (3) *\/ */ |
|
257 |
+/* 412, /\* (2) *\/ */ |
|
258 |
+/* 416, /\* (3) *\/ */ |
|
259 |
+/* 420, /\* (2) *\/ */ |
|
260 |
+/* 428, /\* (4) *\/ */ |
|
261 |
+/* 432, /\* (1) *\/ */ |
|
262 |
+436, /* (18) */ |
|
263 |
+/* 452, /\* (2) *\/ */ |
|
264 |
+/* 456, /\* (8) *\/ */ |
|
265 |
+/* 464, /\* (1) *\/ */ |
|
266 |
+/* 468, /\* (2) *\/ */ |
|
267 |
+/* 480, /\* (1) *\/ */ |
|
268 |
+/* 488, /\* (4) *\/ */ |
|
269 |
+/* 496, /\* (1) *\/ */ |
|
270 |
+/* 500, /\* (2) *\/ */ |
|
271 |
+/* 504, /\* (1) *\/ */ |
|
272 |
+/* 512, /\* (2) *\/ */ |
|
273 |
+/* 520, /\* (6) *\/ */ |
|
274 |
+/* 532, /\* (3) *\/ */ |
|
275 |
+/* 536, /\* (1) *\/ */ |
|
276 |
+540, /* (15) */ |
|
277 |
+/* 552, /\* (4) *\/ */ |
|
278 |
+/* 572, /\* (3) *\/ */ |
|
279 |
+/* 584, /\* (7) *\/ */ |
|
280 |
+/* 588, /\* (1) *\/ */ |
|
281 |
+/* 608, /\* (1) *\/ */ |
|
282 | 282 |
/* 612, /\* (1) *\/ */ |
283 |
-/* 616, /\* (1) *\/ */ |
|
284 |
-/* 620, /\* (5) *\/ */ |
|
283 |
+/* 616, /\* (5) *\/ */ |
|
284 |
+/* 644, /\* (1) *\/ */ |
|
285 | 285 |
/* 648, /\* (1) *\/ */ |
286 |
-/* 652, /\* (1) *\/ */ |
|
287 |
-/* 680, /\* (1) *\/ */ |
|
288 |
-/* 704, /\* (1) *\/ */ |
|
289 |
-/* 716, /\* (1) *\/ */ |
|
286 |
+/* 676, /\* (1) *\/ */ |
|
287 |
+/* 700, /\* (1) *\/ */ |
|
288 |
+/* 712, /\* (1) *\/ */ |
|
289 |
+/* 768, /\* (1) *\/ */ |
|
290 | 290 |
/* 772, /\* (1) *\/ */ |
291 |
-/* 776, /\* (1) *\/ */ |
|
292 |
-1032, /* (7549) */ |
|
293 |
-/* 1044, /\* (14) *\/ */ |
|
294 |
-2076, /* (14) */ |
|
295 |
-4116, /* (9) */ |
|
296 |
-8212, /* (6) */ |
|
297 |
-16404, /* (4) */ |
|
298 |
-63504, /* (7) */ |
|
299 |
-135636, /* (2) */ |
|
300 |
-253992, /* (7) */ |
|
301 |
-1050864, /* (1) */ |
|
291 |
+1028, /* (7585) */ |
|
292 |
+1032, /* (14) */ |
|
293 |
+2084, /* (14) */ |
|
294 |
+4124, /* (9) */ |
|
295 |
+8220, /* (6) */ |
|
296 |
+16412, /* (4) */ |
|
297 |
+63500, /* (7) */ |
|
298 |
+136348, /* (1) */ |
|
299 |
+253988, /* (7) */ |
|
300 |
+1050860, /* (1) */ |
|
302 | 301 |
2097152 |
303 | 302 |
}; |
304 | 303 |
#endif |
... | ... |
@@ -317,8 +324,10 @@ struct MP { |
317 | 317 |
}; |
318 | 318 |
|
319 | 319 |
struct FRAG { |
320 |
- struct FRAG *next; |
|
321 |
- unsigned int sbits; |
|
320 |
+ union { |
|
321 |
+ struct FRAG *next; |
|
322 |
+ unsigned int sbits; |
|
323 |
+ } u; |
|
322 | 324 |
#ifdef CL_DEBUG |
323 | 325 |
unsigned int magic; |
324 | 326 |
#endif |
... | ... |
@@ -349,9 +358,6 @@ struct MP *mp_create() { |
349 | 349 |
unsigned int sz; |
350 | 350 |
memset(&mp, 0, sizeof(mp)); |
351 | 351 |
mp.psize = getpagesize(); |
352 |
-#ifdef DEBUGMPOOL |
|
353 |
- lfd = fopen("mmpool_log", "w"); |
|
354 |
-#endif |
|
355 | 352 |
sz = align_to_pagesize(&mp, MIN_FRAGSIZE); |
356 | 353 |
mp.mpm.usize = align_to_voidptr(sizeof(struct MPMAP)); |
357 | 354 |
mp.mpm.size = sz - align_to_voidptr(sizeof(mp)); |
... | ... |
@@ -425,7 +431,8 @@ void *mp_malloc(struct MP *mp, size_t size) { |
425 | 425 |
/* Case 1: We have a free'd frag */ |
426 | 426 |
if((f = mp->avail[sbits])) { |
427 | 427 |
spam("malloc %p size %u (freed)\n", f, mp_roundup(size)); |
428 |
- mp->avail[sbits] = f->next; |
|
428 |
+ mp->avail[sbits] = f->u.next; |
|
429 |
+ f->u.sbits = sbits; |
|
429 | 430 |
#ifdef CL_DEBUG |
430 | 431 |
f->magic = MPOOLMAGIC; |
431 | 432 |
#endif |
... | ... |
@@ -443,7 +450,7 @@ void *mp_malloc(struct MP *mp, size_t size) { |
443 | 443 |
f = (struct FRAG *)((void *)mpm + mpm->usize); |
444 | 444 |
spam("malloc %p size %u (hole)\n", f, mp_roundup(size)); |
445 | 445 |
mpm->usize += needed; |
446 |
- f->sbits = sbits; |
|
446 |
+ f->u.sbits = sbits; |
|
447 | 447 |
#ifdef CL_DEBUG |
448 | 448 |
f->magic = MPOOLMAGIC; |
449 | 449 |
#endif |
... | ... |
@@ -469,7 +476,7 @@ void *mp_malloc(struct MP *mp, size_t size) { |
469 | 469 |
mp->mpm.next = mpm; |
470 | 470 |
f = (struct FRAG *)((void *)mpm + align_to_voidptr(sizeof(*mpm))); |
471 | 471 |
spam("malloc %p size %u (new map)\n", f, mp_roundup(size)); |
472 |
- f->sbits = sbits; |
|
472 |
+ f->u.sbits = sbits; |
|
473 | 473 |
#ifdef CL_DEBUG |
474 | 474 |
f->magic = MPOOLMAGIC; |
475 | 475 |
#endif |
... | ... |
@@ -478,14 +485,16 @@ void *mp_malloc(struct MP *mp, size_t size) { |
478 | 478 |
|
479 | 479 |
void mp_free(struct MP *mp, void *ptr) { |
480 | 480 |
struct FRAG *f = (struct FRAG *)(ptr - FRAG_OVERHEAD); |
481 |
+ unsigned int sbits; |
|
481 | 482 |
if (!ptr) return; |
482 | 483 |
|
483 | 484 |
#ifdef CL_DEBUG |
484 | 485 |
assert(f->magic == MPOOLMAGIC && "Attempt to mp_free a pointer we did not allocate!"); |
485 | 486 |
#endif |
486 | 487 |
|
487 |
- f->next = mp->avail[f->sbits]; |
|
488 |
- mp->avail[f->sbits] = f; |
|
488 |
+ sbits = f->u.sbits; |
|
489 |
+ f->u.next = mp->avail[sbits]; |
|
490 |
+ mp->avail[sbits] = f; |
|
489 | 491 |
spam("free @ %p\n", f); |
490 | 492 |
} |
491 | 493 |
|
... | ... |
@@ -501,17 +510,18 @@ void *mp_calloc(struct MP *mp, size_t nmemb, size_t size) { |
501 | 501 |
|
502 | 502 |
void *mp_realloc(struct MP *mp, void *ptr, size_t size) { |
503 | 503 |
struct FRAG *f = (struct FRAG *)(ptr - FRAG_OVERHEAD); |
504 |
- unsigned int csize; |
|
504 |
+ unsigned int csize, sbits; |
|
505 | 505 |
void *new_ptr; |
506 | 506 |
if (!ptr) return mp_malloc(mp, size); |
507 | 507 |
|
508 |
- spam("realloc @ %p (size %u -> %u))\n", f, from_bits(f->sbits), size); |
|
509 |
- if(!size || !(csize = from_bits(f->sbits))) { |
|
508 |
+ spam("realloc @ %p (size %u -> %u))\n", f, from_bits(f->u.sbits), size); |
|
509 |
+ if(!size || !(csize = from_bits(f->u.sbits))) { |
|
510 | 510 |
cli_errmsg("mp_realloc(): Attempt to allocate %lu bytes. Please report to http://bugs.clamav.net\n", (unsigned long int) size); |
511 | 511 |
return NULL; |
512 | 512 |
} |
513 | 513 |
csize -= FRAG_OVERHEAD; |
514 |
- if (csize >= size) return ptr; |
|
514 |
+ if (csize >= size && (!f->u.sbits || from_bits(f->u.sbits-1)-FRAG_OVERHEAD < size)) |
|
515 |
+ return ptr; |
|
515 | 516 |
if (!(new_ptr = mp_malloc(mp, size))) |
516 | 517 |
return NULL; |
517 | 518 |
memcpy(new_ptr, ptr, csize); |
... | ... |
@@ -525,14 +535,15 @@ void *mp_realloc2(struct MP *mp, void *ptr, size_t size) { |
525 | 525 |
void *new_ptr; |
526 | 526 |
if (!ptr) return mp_malloc(mp, size); |
527 | 527 |
|
528 |
- spam("realloc @ %p (size %u -> %u))\n", f, from_bits(f->sbits), size); |
|
529 |
- if(!size || !(csize = from_bits(f->sbits))) { |
|
528 |
+ spam("realloc @ %p (size %u -> %u))\n", f, from_bits(f->u.sbits), size); |
|
529 |
+ if(!size || !(csize = from_bits(f->u.sbits))) { |
|
530 | 530 |
cli_errmsg("mp_realloc2(): Attempt to allocate %lu bytes. Please report to http://bugs.clamav.net\n", (unsigned long int) size); |
531 | 531 |
mp_free(mp, ptr); |
532 | 532 |
return NULL; |
533 | 533 |
} |
534 | 534 |
csize -= FRAG_OVERHEAD; |
535 |
- if (csize >= size) return ptr; |
|
535 |
+ if (csize >= size && (!f->u.sbits || from_bits(f->u.sbits-1)-FRAG_OVERHEAD < size)) |
|
536 |
+ return ptr; |
|
536 | 537 |
if ((new_ptr = mp_malloc(mp, size))) |
537 | 538 |
memcpy(new_ptr, ptr, csize); |
538 | 539 |
mp_free(mp, ptr); |