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

Reply via email to