On Fri Mar 6 01:33:22 PST 2015, [email protected] wrote:
> I am getting an error from leak(1):
>
> <stdin>:2: (error) mainmem used but not set
>
> Anyone seen such, understand, or even know where its coming from?
i had to use some patches to acidleak to keep it from running out of
memory on medium-sized heaps due to a pathological case in the pool
allocator. (plus, linear allocation usually ends in tears):
; 9diff acidleak.c
/n/sources/plan9/sys/src/cmd/aux/acidleak.c:202,213 - acidleak.c:202,211
p[Blinelen(&bio)-1] = '\0';
nf = tokenize(p, f, nelem(f));
if(nf >= 4 && strcmp(f[0], "data") == 0) {
- if(ndata >= adata){
+ if(ndata == adata){
if(adata == 0)
adata = 4096;
- else
- adata += adata / 4; /* increase 25% */
- data = erealloc(data, adata * sizeof(Data));
+ data = erealloc(data, (adata <<=
1)*sizeof(Data));
}
data[ndata].addr = strtoul(f[1], nil, 0);
data[ndata].val = strtoul(f[2], nil, 0);
/n/sources/plan9/sys/src/cmd/aux/acidleak.c:215,228 - acidleak.c:213,223
data[ndata].b = 0;
ndata++;
}
- if(nf >= 5 &&
- (strcmp(f[0], "block") == 0 || strcmp(f[0], "free") == 0)) {
- if(nblock >= ablock){
+ if(nf >= 5 && (strcmp(f[0], "block") == 0 || strcmp(f[0],
"free") == 0)) {
+ if(nblock == ablock){
if(ablock == 0)
ablock = 4096;
- else
- ablock += ablock / 4; /* increase 25% */
- block = erealloc(block, ablock * sizeof(Block));
+ block = erealloc(block, (ablock <<=
1)*sizeof(Block));
}
block[nblock].addr = strtoul(f[1], nil, 0);
block[nblock].size = strtoul(f[2], nil, 0);
- erik