mirror of
https://github.com/Cisco-Talos/clamav.git
synced 2026-05-07 15:15:40 -04:00
mpool opt
git-svn: trunk@4354
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
Sat Nov 8 05:27:43 CET 2008 (acab)
|
||||
-----------------------------------
|
||||
* libclamav/mpool.c: slightly optimized (we're now faster and more compact
|
||||
than malloc() - it's just because we cheat more :)
|
||||
|
||||
Fri Nov 7 19:37:38 EET 2008 (edwin)
|
||||
------------------------------------
|
||||
* clamd/, libclamav/, libclamunrar/, unit_tests/: fix more compiler
|
||||
|
||||
17
contrib/mpoolparse/mpoolparse.pl
Normal file
17
contrib/mpoolparse/mpoolparse.pl
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my %frags = ();
|
||||
|
||||
while (<>) {
|
||||
chomp;
|
||||
next unless /^LibClamAV Warning: [mc]alloc .* size (\d+) .*$/;
|
||||
$frags{$1}++;
|
||||
}
|
||||
|
||||
foreach (sort {$a<=>$b} (keys(%frags))) {
|
||||
print "$_, /* ($frags{$_}) */\n";
|
||||
}
|
||||
|
||||
@@ -44,9 +44,8 @@
|
||||
#include <assert.h>
|
||||
|
||||
#define MPOOLMAGIC 0x5adeada5
|
||||
/*#define DEBUGMPOOL /\* DO NOT define *\/ */
|
||||
/* #define DEBUGMPOOL /\* DO NOT define *\/ */
|
||||
#ifdef DEBUGMPOOL
|
||||
FILE *lfd = NULL;
|
||||
#define spam(...) cli_warnmsg( __VA_ARGS__)
|
||||
#else
|
||||
#define spam
|
||||
@@ -68,85 +67,94 @@ FILE *lfd = NULL;
|
||||
|
||||
#if SIZEOF_VOID_P==8
|
||||
static const unsigned int fragsz[] = {
|
||||
24, /* (33067) */
|
||||
32, /* (93970) */
|
||||
40, /* (731473) */
|
||||
48, /* (35342) */
|
||||
56, /* (6967) */
|
||||
64, /* (442053) */
|
||||
72, /* (2706) */
|
||||
80, /* (2281) */
|
||||
88, /* (3658) */
|
||||
96, /* (2620) */
|
||||
104, /* (3705) */
|
||||
112, /* (3722) */
|
||||
120, /* (4012) */
|
||||
128, /* (5161) */
|
||||
136, /* (22458) */
|
||||
144, /* (4339) */
|
||||
152, /* (4315) */
|
||||
160, /* (12195) */
|
||||
168, /* (18042) */
|
||||
/* 176, /\* (341) *\/ */
|
||||
/* 184, /\* (329) *\/ */
|
||||
192, /* (202) */
|
||||
/* 200, /\* (238) *\/ */
|
||||
/* 208, /\* (166) *\/ */
|
||||
/* 216, /\* (179) *\/ */
|
||||
224, /* (216) */
|
||||
/* 232, /\* (189) *\/ */
|
||||
/* 240, /\* (157) *\/ */
|
||||
/* 248, /\* (178) *\/ */
|
||||
256, /* (133) */
|
||||
/* 264, /\* (157) *\/ */
|
||||
/* 272, /\* (140) *\/ */
|
||||
/* 280, /\* (161) *\/ */
|
||||
/* 288, /\* (125) *\/ */
|
||||
/* 296, /\* (141) *\/ */
|
||||
304, /* (100) */
|
||||
/* 312, /\* (114) *\/ */
|
||||
/* 320, /\* (70) *\/ */
|
||||
/* 328, /\* (13) *\/ */
|
||||
/* 336, /\* (21) *\/ */
|
||||
/* 344, /\* (21) *\/ */
|
||||
352, /* (13) */
|
||||
/* 360, /\* (26) *\/ */
|
||||
/* 368, /\* (8) *\/ */
|
||||
/* 376, /\* (14) *\/ */
|
||||
/* 384, /\* (5) *\/ */
|
||||
/* 392, /\* (6) *\/ */
|
||||
/* 400, /\* (4) *\/ */
|
||||
/* 408, /\* (2) *\/ */
|
||||
/* 416, /\* (6) *\/ */
|
||||
424, /* (20) */
|
||||
16, /* (37189) */
|
||||
24, /* (94629) */
|
||||
32, /* (756188) */
|
||||
40, /* (35658) */
|
||||
48, /* (6989) */
|
||||
56, /* (454597) */
|
||||
64, /* (2736) */
|
||||
72, /* (2298) */
|
||||
80, /* (3664) */
|
||||
88, /* (2636) */
|
||||
96, /* (3715) */
|
||||
104, /* (3732) */
|
||||
112, /* (4021) */
|
||||
120, /* (5165) */
|
||||
128, /* (22788) */
|
||||
136, /* (4343) */
|
||||
144, /* (4321) */
|
||||
152, /* (12196) */
|
||||
160, /* (18044) */
|
||||
/* 168, /\* (344) *\/ */
|
||||
/* 176, /\* (335) *\/ */
|
||||
/* 184, /\* (204) *\/ */
|
||||
192, /* (226) */
|
||||
/* 200, /\* (185) *\/ */
|
||||
/* 208, /\* (181) *\/ */
|
||||
/* 216, /\* (217) *\/ */
|
||||
224, /* (172) */
|
||||
/* 232, /\* (175) *\/ */
|
||||
/* 240, /\* (178) *\/ */
|
||||
/* 248, /\* (135) *\/ */
|
||||
256, /* (140) */
|
||||
/* 264, /\* (158) *\/ */
|
||||
/* 272, /\* (161) *\/ */
|
||||
/* 280, /\* (126) *\/ */
|
||||
/* 288, /\* (141) *\/ */
|
||||
296, /* (101) */
|
||||
/* 304, /\* (97) *\/ */
|
||||
/* 312, /\* (85) *\/ */
|
||||
/* 320, /\* (14) *\/ */
|
||||
/* 328, /\* (21) *\/ */
|
||||
336, /* (21) */
|
||||
/* 344, /\* (12) *\/ */
|
||||
/* 352, /\* (10) *\/ */
|
||||
/* 360, /\* (7) *\/ */
|
||||
/* 368, /\* (14) *\/ */
|
||||
376, /* (21) */
|
||||
/* 384, /\* (6) *\/ */
|
||||
/* 392, /\* (4) *\/ */
|
||||
/* 400, /\* (3) *\/ */
|
||||
/* 408, /\* (6) *\/ */
|
||||
/* 416, /\* (5) *\/ */
|
||||
/* 424, /\* (5) *\/ */
|
||||
/* 432, /\* (4) *\/ */
|
||||
/* 440, /\* (4) *\/ */
|
||||
/* 448, /\* (4) *\/ */
|
||||
/* 464, /\* (2) *\/ */
|
||||
/* 472, /\* (2) *\/ */
|
||||
/* 480, /\* (1) *\/ */
|
||||
/* 496, /\* (1) *\/ */
|
||||
/* 512, /\* (2) *\/ */
|
||||
528, /* (15) */
|
||||
/* 536, /\* (1) *\/ */
|
||||
/* 544, /\* (2) *\/ */
|
||||
/* 552, /\* (1) *\/ */
|
||||
/* 584, /\* (3) *\/ */
|
||||
/* 600, /\* (1) *\/ */
|
||||
/* 624, /\* (1) *\/ */
|
||||
440, /* (19) */
|
||||
/* 456, /\* (2) *\/ */
|
||||
/* 464, /\* (8) *\/ */
|
||||
/* 472, /\* (3) *\/ */
|
||||
/* 488, /\* (1) *\/ */
|
||||
/* 496, /\* (4) *\/ */
|
||||
/* 504, /\* (3) *\/ */
|
||||
/* 512, /\* (1) *\/ */
|
||||
/* 520, /\* (2) *\/ */
|
||||
/* 528, /\* (6) *\/ */
|
||||
/* 536, /\* (3) *\/ */
|
||||
544, /* (16) */
|
||||
/* 560, /\* (4) *\/ */
|
||||
/* 576, /\* (3) *\/ */
|
||||
/* 592, /\* (8) *\/ */
|
||||
/* 616, /\* (2) *\/ */
|
||||
/* 624, /\* (5) *\/ */
|
||||
/* 648, /\* (1) *\/ */
|
||||
/* 656, /\* (1) *\/ */
|
||||
/* 784, /\* (2) *\/ */
|
||||
1040, /* (15) */
|
||||
/* 2064, /\* (7456) *\/ */
|
||||
2072, /* (14) */
|
||||
4112, /* (14) */
|
||||
8208, /* (9) */
|
||||
16400, /* (6) */
|
||||
32784, /* (4) */
|
||||
63512, /* (7) */
|
||||
134408, /* (2) */
|
||||
507984, /* (7) */
|
||||
1051040, /* (1) */
|
||||
/* 680, /\* (1) *\/ */
|
||||
/* 704, /\* (1) *\/ */
|
||||
/* 720, /\* (1) *\/ */
|
||||
/* 776, /\* (2) *\/ */
|
||||
1056, /* (15) */
|
||||
2056, /* (7585) */
|
||||
/* 2064, /\* (14) *\/ */
|
||||
2088, /* (14) */
|
||||
4128, /* (14) */
|
||||
8224, /* (9) */
|
||||
16416, /* (6) */
|
||||
32800, /* (4) */
|
||||
63504, /* (7) */
|
||||
136352, /* (1) */
|
||||
507976, /* (7) */
|
||||
1051032, /* (1) */
|
||||
2097152
|
||||
/* ^^ This shouldn't be reached but it's a good fall back
|
||||
* MAX_ALLOCATION is 184549376 but that's really not need here */
|
||||
@@ -155,150 +163,149 @@ static const unsigned int fragsz[] = {
|
||||
#else
|
||||
|
||||
static const unsigned int fragsz[] = {
|
||||
12, /* (2297) */
|
||||
16, /* (30785) */
|
||||
20, /* (41460) */
|
||||
24, /* (69214) */
|
||||
28, /* (639488) */
|
||||
32, /* (107920) */
|
||||
36, /* (454213) */
|
||||
40, /* (11497) */
|
||||
44, /* (1688) */
|
||||
48, /* (5294) */
|
||||
52, /* (1496) */
|
||||
56, /* (3738) */
|
||||
60, /* (1719) */
|
||||
64, /* (918) */
|
||||
68, /* (956) */
|
||||
72, /* (1324) */
|
||||
76, /* (1905) */
|
||||
80, /* (1745) */
|
||||
84, /* (1053) */
|
||||
88, /* (1566) */
|
||||
92, /* (2081) */
|
||||
96, /* (20851) */
|
||||
100, /* (1882) */
|
||||
104, /* (1848) */
|
||||
108, /* (1931) */
|
||||
112, /* (2079) */
|
||||
116, /* (1736) */
|
||||
120, /* (3425) */
|
||||
124, /* (2115) */
|
||||
128, /* (1298) */
|
||||
132, /* (2307) */
|
||||
136, /* (2033) */
|
||||
140, /* (2837) */
|
||||
144, /* (1479) */
|
||||
148, /* (1607) */
|
||||
152, /* (10587) */
|
||||
156, /* (2719) */
|
||||
160, /* (15311) */
|
||||
164, /* (196) */
|
||||
168, /* (145) */
|
||||
172, /* (211) */
|
||||
176, /* (140) */
|
||||
180, /* (116) */
|
||||
/* 184, /\* (86) *\/ */
|
||||
188, /* (119) */
|
||||
192, /* (104) */
|
||||
/* 196, /\* (99) *\/ */
|
||||
/* 200, /\* (84) *\/ */
|
||||
/* 204, /\* (94) *\/ */
|
||||
/* 208, /\* (86) *\/ */
|
||||
212, /* (136) */
|
||||
/* 216, /\* (80) *\/ */
|
||||
/* 220, /\* (75) *\/ */
|
||||
/* 224, /\* (97) *\/ */
|
||||
/* 228, /\* (99) *\/ */
|
||||
/* 232, /\* (74) *\/ */
|
||||
236, /* (114) */
|
||||
/* 240, /\* (64) *\/ */
|
||||
/* 244, /\* (73) *\/ */
|
||||
/* 248, /\* (62) *\/ */
|
||||
/* 252, /\* (71) *\/ */
|
||||
/* 256, /\* (69) *\/ */
|
||||
/* 260, /\* (85) *\/ */
|
||||
/* 264, /\* (71) *\/ */
|
||||
268, /* (92) */
|
||||
/* 272, /\* (69) *\/ */
|
||||
/* 276, /\* (56) *\/ */
|
||||
/* 280, /\* (69) *\/ */
|
||||
/* 284, /\* (71) *\/ */
|
||||
/* 288, /\* (70) *\/ */
|
||||
/* 292, /\* (62) *\/ */
|
||||
/* 296, /\* (39) *\/ */
|
||||
/* 300, /\* (54) *\/ */
|
||||
/* 304, /\* (43) *\/ */
|
||||
/* 308, /\* (54) *\/ */
|
||||
312, /* (30) */
|
||||
/* 316, /\* (8) *\/ */
|
||||
/* 320, /\* (5) *\/ */
|
||||
/* 324, /\* (7) *\/ */
|
||||
/* 328, /\* (14) *\/ */
|
||||
/* 332, /\* (13) *\/ */
|
||||
/* 336, /\* (8) *\/ */
|
||||
/* 340, /\* (7) *\/ */
|
||||
/* 344, /\* (6) *\/ */
|
||||
/* 348, /\* (2) *\/ */
|
||||
/* 352, /\* (7) *\/ */
|
||||
/* 356, /\* (18) *\/ */
|
||||
/* 360, /\* (5) *\/ */
|
||||
364, /* (12) */
|
||||
/* 368, /\* (2) *\/ */
|
||||
/* 372, /\* (4) *\/ */
|
||||
/* 376, /\* (2) *\/ */
|
||||
/* 380, /\* (5) *\/ */
|
||||
/* 384, /\* (1) *\/ */
|
||||
/* 392, /\* (4) *\/ */
|
||||
/* 396, /\* (3) *\/ */
|
||||
/* 404, /\* (4) *\/ */
|
||||
/* 408, /\* (2) *\/ */
|
||||
/* 412, /\* (3) *\/ */
|
||||
/* 416, /\* (2) *\/ */
|
||||
/* 420, /\* (3) *\/ */
|
||||
/* 424, /\* (2) *\/ */
|
||||
428, /* (16) */
|
||||
/* 432, /\* (4) *\/ */
|
||||
/* 436, /\* (1) *\/ */
|
||||
/* 440, /\* (3) *\/ */
|
||||
/* 452, /\* (1) *\/ */
|
||||
/* 456, /\* (2) *\/ */
|
||||
/* 460, /\* (8) *\/ */
|
||||
/* 468, /\* (1) *\/ */
|
||||
/* 472, /\* (2) *\/ */
|
||||
/* 484, /\* (1) *\/ */
|
||||
/* 492, /\* (4) *\/ */
|
||||
/* 500, /\* (1) *\/ */
|
||||
/* 504, /\* (2) *\/ */
|
||||
/* 508, /\* (1) *\/ */
|
||||
/* 516, /\* (2) *\/ */
|
||||
/* 524, /\* (5) *\/ */
|
||||
532, /* (15) */
|
||||
/* 536, /\* (3) *\/ */
|
||||
/* 540, /\* (1) *\/ */
|
||||
/* 556, /\* (4) *\/ */
|
||||
/* 576, /\* (3) *\/ */
|
||||
/* 588, /\* (8) *\/ */
|
||||
8, /* (6381) */
|
||||
12, /* (30903) */
|
||||
16, /* (41616) */
|
||||
20, /* (69507) */
|
||||
24, /* (646497) */
|
||||
28, /* (108677) */
|
||||
32, /* (458074) */
|
||||
36, /* (11537) */
|
||||
40, /* (1690) */
|
||||
44, /* (5326) */
|
||||
48, /* (1505) */
|
||||
52, /* (3777) */
|
||||
56, /* (1730) */
|
||||
60, /* (943) */
|
||||
64, /* (963) */
|
||||
68, /* (1345) */
|
||||
72, /* (1909) */
|
||||
76, /* (1765) */
|
||||
80, /* (1060) */
|
||||
84, /* (1586) */
|
||||
88, /* (2082) */
|
||||
92, /* (21009) */
|
||||
96, /* (1886) */
|
||||
100, /* (1869) */
|
||||
104, /* (1936) */
|
||||
108, /* (2097) */
|
||||
112, /* (1736) */
|
||||
116, /* (3442) */
|
||||
120, /* (2117) */
|
||||
124, /* (1317) */
|
||||
128, /* (2307) */
|
||||
132, /* (2051) */
|
||||
136, /* (2839) */
|
||||
140, /* (1497) */
|
||||
144, /* (1607) */
|
||||
148, /* (10604) */
|
||||
152, /* (2719) */
|
||||
156, /* (15328) */
|
||||
160, /* (197) */
|
||||
/* 164, /\* (161) *\/ */
|
||||
/* 168, /\* (195) *\/ */
|
||||
172, /* (156) */
|
||||
/* 176, /\* (132) *\/ */
|
||||
/* 180, /\* (86) *\/ */
|
||||
/* 184, /\* (120) *\/ */
|
||||
188, /* (122) */
|
||||
/* 192, /\* (84) *\/ */
|
||||
/* 196, /\* (84) *\/ */
|
||||
/* 200, /\* (95) *\/ */
|
||||
/* 204, /\* (86) *\/ */
|
||||
208, /* (137) */
|
||||
/* 212, /\* (95) *\/ */
|
||||
/* 216, /\* (75) *\/ */
|
||||
/* 220, /\* (97) *\/ */
|
||||
/* 224, /\* (84) *\/ */
|
||||
/* 228, /\* (74) *\/ */
|
||||
232, /* (114) */
|
||||
/* 236, /\* (79) *\/ */
|
||||
/* 240, /\* (73) *\/ */
|
||||
/* 244, /\* (62) *\/ */
|
||||
/* 248, /\* (71) *\/ */
|
||||
/* 252, /\* (69) *\/ */
|
||||
256, /* (70) */
|
||||
/* 260, /\* (86) *\/ */
|
||||
/* 264, /\* (92) *\/ */
|
||||
/* 268, /\* (69) *\/ */
|
||||
/* 272, /\* (56) *\/ */
|
||||
/* 276, /\* (70) *\/ */
|
||||
280, /* (71) */
|
||||
/* 284, /\* (70) *\/ */
|
||||
/* 288, /\* (62) *\/ */
|
||||
/* 292, /\* (54) *\/ */
|
||||
/* 296, /\* (54) *\/ */
|
||||
/* 300, /\* (43) *\/ */
|
||||
/* 304, /\* (39) *\/ */
|
||||
308, /* (30) */
|
||||
/* 312, /\* (9) *\/ */
|
||||
/* 316, /\* (5) *\/ */
|
||||
/* 320, /\* (7) *\/ */
|
||||
/* 324, /\* (14) *\/ */
|
||||
/* 328, /\* (13) *\/ */
|
||||
332, /* (23) */
|
||||
/* 336, /\* (6) *\/ */
|
||||
/* 340, /\* (6) *\/ */
|
||||
/* 344, /\* (3) *\/ */
|
||||
/* 348, /\* (7) *\/ */
|
||||
/* 352, /\* (3) *\/ */
|
||||
/* 356, /\* (4) *\/ */
|
||||
/* 360, /\* (12) *\/ */
|
||||
/* 364, /\* (2) *\/ */
|
||||
/* 368, /\* (3) *\/ */
|
||||
372, /* (17) */
|
||||
/* 376, /\* (5) *\/ */
|
||||
/* 380, /\* (1) *\/ */
|
||||
/* 388, /\* (4) *\/ */
|
||||
/* 392, /\* (3) *\/ */
|
||||
/* 400, /\* (4) *\/ */
|
||||
/* 404, /\* (2) *\/ */
|
||||
/* 408, /\* (3) *\/ */
|
||||
/* 412, /\* (2) *\/ */
|
||||
/* 416, /\* (3) *\/ */
|
||||
/* 420, /\* (2) *\/ */
|
||||
/* 428, /\* (4) *\/ */
|
||||
/* 432, /\* (1) *\/ */
|
||||
436, /* (18) */
|
||||
/* 452, /\* (2) *\/ */
|
||||
/* 456, /\* (8) *\/ */
|
||||
/* 464, /\* (1) *\/ */
|
||||
/* 468, /\* (2) *\/ */
|
||||
/* 480, /\* (1) *\/ */
|
||||
/* 488, /\* (4) *\/ */
|
||||
/* 496, /\* (1) *\/ */
|
||||
/* 500, /\* (2) *\/ */
|
||||
/* 504, /\* (1) *\/ */
|
||||
/* 512, /\* (2) *\/ */
|
||||
/* 520, /\* (6) *\/ */
|
||||
/* 532, /\* (3) *\/ */
|
||||
/* 536, /\* (1) *\/ */
|
||||
540, /* (15) */
|
||||
/* 552, /\* (4) *\/ */
|
||||
/* 572, /\* (3) *\/ */
|
||||
/* 584, /\* (7) *\/ */
|
||||
/* 588, /\* (1) *\/ */
|
||||
/* 608, /\* (1) *\/ */
|
||||
/* 612, /\* (1) *\/ */
|
||||
/* 616, /\* (1) *\/ */
|
||||
/* 620, /\* (5) *\/ */
|
||||
/* 616, /\* (5) *\/ */
|
||||
/* 644, /\* (1) *\/ */
|
||||
/* 648, /\* (1) *\/ */
|
||||
/* 652, /\* (1) *\/ */
|
||||
/* 680, /\* (1) *\/ */
|
||||
/* 704, /\* (1) *\/ */
|
||||
/* 716, /\* (1) *\/ */
|
||||
/* 676, /\* (1) *\/ */
|
||||
/* 700, /\* (1) *\/ */
|
||||
/* 712, /\* (1) *\/ */
|
||||
/* 768, /\* (1) *\/ */
|
||||
/* 772, /\* (1) *\/ */
|
||||
/* 776, /\* (1) *\/ */
|
||||
1032, /* (7549) */
|
||||
/* 1044, /\* (14) *\/ */
|
||||
2076, /* (14) */
|
||||
4116, /* (9) */
|
||||
8212, /* (6) */
|
||||
16404, /* (4) */
|
||||
63504, /* (7) */
|
||||
135636, /* (2) */
|
||||
253992, /* (7) */
|
||||
1050864, /* (1) */
|
||||
1028, /* (7585) */
|
||||
1032, /* (14) */
|
||||
2084, /* (14) */
|
||||
4124, /* (9) */
|
||||
8220, /* (6) */
|
||||
16412, /* (4) */
|
||||
63500, /* (7) */
|
||||
136348, /* (1) */
|
||||
253988, /* (7) */
|
||||
1050860, /* (1) */
|
||||
2097152
|
||||
};
|
||||
#endif
|
||||
@@ -317,8 +324,10 @@ struct MP {
|
||||
};
|
||||
|
||||
struct FRAG {
|
||||
struct FRAG *next;
|
||||
unsigned int sbits;
|
||||
union {
|
||||
struct FRAG *next;
|
||||
unsigned int sbits;
|
||||
} u;
|
||||
#ifdef CL_DEBUG
|
||||
unsigned int magic;
|
||||
#endif
|
||||
@@ -349,9 +358,6 @@ struct MP *mp_create() {
|
||||
unsigned int sz;
|
||||
memset(&mp, 0, sizeof(mp));
|
||||
mp.psize = getpagesize();
|
||||
#ifdef DEBUGMPOOL
|
||||
lfd = fopen("mmpool_log", "w");
|
||||
#endif
|
||||
sz = align_to_pagesize(&mp, MIN_FRAGSIZE);
|
||||
mp.mpm.usize = align_to_voidptr(sizeof(struct MPMAP));
|
||||
mp.mpm.size = sz - align_to_voidptr(sizeof(mp));
|
||||
@@ -425,7 +431,8 @@ void *mp_malloc(struct MP *mp, size_t size) {
|
||||
/* Case 1: We have a free'd frag */
|
||||
if((f = mp->avail[sbits])) {
|
||||
spam("malloc %p size %u (freed)\n", f, mp_roundup(size));
|
||||
mp->avail[sbits] = f->next;
|
||||
mp->avail[sbits] = f->u.next;
|
||||
f->u.sbits = sbits;
|
||||
#ifdef CL_DEBUG
|
||||
f->magic = MPOOLMAGIC;
|
||||
#endif
|
||||
@@ -443,7 +450,7 @@ void *mp_malloc(struct MP *mp, size_t size) {
|
||||
f = (struct FRAG *)((void *)mpm + mpm->usize);
|
||||
spam("malloc %p size %u (hole)\n", f, mp_roundup(size));
|
||||
mpm->usize += needed;
|
||||
f->sbits = sbits;
|
||||
f->u.sbits = sbits;
|
||||
#ifdef CL_DEBUG
|
||||
f->magic = MPOOLMAGIC;
|
||||
#endif
|
||||
@@ -469,7 +476,7 @@ void *mp_malloc(struct MP *mp, size_t size) {
|
||||
mp->mpm.next = mpm;
|
||||
f = (struct FRAG *)((void *)mpm + align_to_voidptr(sizeof(*mpm)));
|
||||
spam("malloc %p size %u (new map)\n", f, mp_roundup(size));
|
||||
f->sbits = sbits;
|
||||
f->u.sbits = sbits;
|
||||
#ifdef CL_DEBUG
|
||||
f->magic = MPOOLMAGIC;
|
||||
#endif
|
||||
@@ -478,14 +485,16 @@ void *mp_malloc(struct MP *mp, size_t size) {
|
||||
|
||||
void mp_free(struct MP *mp, void *ptr) {
|
||||
struct FRAG *f = (struct FRAG *)(ptr - FRAG_OVERHEAD);
|
||||
unsigned int sbits;
|
||||
if (!ptr) return;
|
||||
|
||||
#ifdef CL_DEBUG
|
||||
assert(f->magic == MPOOLMAGIC && "Attempt to mp_free a pointer we did not allocate!");
|
||||
#endif
|
||||
|
||||
f->next = mp->avail[f->sbits];
|
||||
mp->avail[f->sbits] = f;
|
||||
sbits = f->u.sbits;
|
||||
f->u.next = mp->avail[sbits];
|
||||
mp->avail[sbits] = f;
|
||||
spam("free @ %p\n", f);
|
||||
}
|
||||
|
||||
@@ -501,17 +510,18 @@ void *mp_calloc(struct MP *mp, size_t nmemb, size_t size) {
|
||||
|
||||
void *mp_realloc(struct MP *mp, void *ptr, size_t size) {
|
||||
struct FRAG *f = (struct FRAG *)(ptr - FRAG_OVERHEAD);
|
||||
unsigned int csize;
|
||||
unsigned int csize, sbits;
|
||||
void *new_ptr;
|
||||
if (!ptr) return mp_malloc(mp, size);
|
||||
|
||||
spam("realloc @ %p (size %u -> %u))\n", f, from_bits(f->sbits), size);
|
||||
if(!size || !(csize = from_bits(f->sbits))) {
|
||||
spam("realloc @ %p (size %u -> %u))\n", f, from_bits(f->u.sbits), size);
|
||||
if(!size || !(csize = from_bits(f->u.sbits))) {
|
||||
cli_errmsg("mp_realloc(): Attempt to allocate %lu bytes. Please report to http://bugs.clamav.net\n", (unsigned long int) size);
|
||||
return NULL;
|
||||
}
|
||||
csize -= FRAG_OVERHEAD;
|
||||
if (csize >= size) return ptr;
|
||||
if (csize >= size && (!f->u.sbits || from_bits(f->u.sbits-1)-FRAG_OVERHEAD < size))
|
||||
return ptr;
|
||||
if (!(new_ptr = mp_malloc(mp, size)))
|
||||
return NULL;
|
||||
memcpy(new_ptr, ptr, csize);
|
||||
@@ -525,14 +535,15 @@ void *mp_realloc2(struct MP *mp, void *ptr, size_t size) {
|
||||
void *new_ptr;
|
||||
if (!ptr) return mp_malloc(mp, size);
|
||||
|
||||
spam("realloc @ %p (size %u -> %u))\n", f, from_bits(f->sbits), size);
|
||||
if(!size || !(csize = from_bits(f->sbits))) {
|
||||
spam("realloc @ %p (size %u -> %u))\n", f, from_bits(f->u.sbits), size);
|
||||
if(!size || !(csize = from_bits(f->u.sbits))) {
|
||||
cli_errmsg("mp_realloc2(): Attempt to allocate %lu bytes. Please report to http://bugs.clamav.net\n", (unsigned long int) size);
|
||||
mp_free(mp, ptr);
|
||||
return NULL;
|
||||
}
|
||||
csize -= FRAG_OVERHEAD;
|
||||
if (csize >= size) return ptr;
|
||||
if (csize >= size && (!f->u.sbits || from_bits(f->u.sbits-1)-FRAG_OVERHEAD < size))
|
||||
return ptr;
|
||||
if ((new_ptr = mp_malloc(mp, size)))
|
||||
memcpy(new_ptr, ptr, csize);
|
||||
mp_free(mp, ptr);
|
||||
|
||||
Reference in New Issue
Block a user