From owner-freebsd-bugs Sat Sep 13 11:20:05 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.7/8.8.7) id LAA18610 for bugs-outgoing; Sat, 13 Sep 1997 11:20:05 -0700 (PDT) Received: (from gnats@localhost) by hub.freebsd.org (8.8.7/8.8.7) id LAA18566; Sat, 13 Sep 1997 11:20:02 -0700 (PDT) Resent-Date: Sat, 13 Sep 1997 11:20:02 -0700 (PDT) Resent-Message-Id: <199709131820.LAA18566@hub.freebsd.org> Resent-From: gnats (GNATS Management) Resent-To: freebsd-bugs Resent-Reply-To: FreeBSD-gnats@FreeBSD.ORG, mak@webcrawler.com Received: from mail.webcrawler.com (mail.webcrawler.com [204.62.245.201]) by hub.freebsd.org (8.8.7/8.8.7) with SMTP id LAA18470 for ; Sat, 13 Sep 1997 11:18:23 -0700 (PDT) Received: (qmail 12749 invoked by uid 982); 13 Sep 1997 18:14:44 -0000 Message-Id: <19970913181444.12748.qmail@mail.webcrawler.com> Date: 13 Sep 1997 18:14:44 -0000 From: m.koster@webcrawler.com Reply-To: mak@webcrawler.com To: FreeBSD-gnats-submit@FreeBSD.ORG X-Send-Pr-Version: 3.2 Subject: bin/4526: realloc causes excessive swapping (more info for bin/4524) Sender: owner-freebsd-bugs@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk >Number: 4526 >Category: bin >Synopsis: realloc causes excessive swapping (more info for bin/4524) >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sat Sep 13 11:20:01 PDT 1997 >Last-Modified: >Originator: Martijn Koster >Organization: Excite, Inc. >Release: FreeBSD 2.2-STABLE i386 >Environment: FreeBSD 2.2-STABLE #0: Wed Sep 10 12:00:23 PDT 1997 >Description: This provides more information for bin/4524 Repeatedly calling realloc causes much more memory to be used then you'd expect. For example, when procmail tried reading an 8M message, this was sufficient to run a 64M (128M swap) machine doing nothing else out of swap (and into the ground :-) >How-To-Repeat: This code reproduced the problem outside procmail: #include #include #include int main(int argc, char* argv[]) { size_t size = 0; char *p = NULL; int max = 8404992; if (argc > 2) { fprintf(stderr, "Usage: %s maxmem\n", argv[0]); exit(-1); } if (argc > 1) max = atoi(argv[1]); while(1) { size += 16384; if (size > max) break; fprintf(stderr, "realloc(%u)\n", size); if ((p = realloc(p, size)) == NULL) { fprintf(stderr, "out of memory\n"); exit(-1); } } { int c; printf("done. press return to quit\n"); read(0, &c, 1); } } >Fix: Recompiling the code with the malloc.c from freebsd-current * $Id: malloc.c,v 1.32 1997/08/31 05:59:39 phk Exp $ fixed things (as did recompiling libc with that malloc.c) Now the program is killed after getting much further than before; (I assume when it hits its resource limits) instead of impacting the machine. This fix was previously reported by jfieber@indiana.edu back in June >Audit-Trail: >Unformatted: