Return to BSD News archive
Newsgroups: comp.unix.bsd Path: sserve!manuel.anu.edu.au!munnari.oz.au!bunyip.cc.uq.oz.au!citec!sgccseh From: sgccseh@citec.oz.au (Steve Hocking) Subject: Patch for memory leak in kvm.c Organization: CITEC Date: Wed, 9 Dec 1992 01:10:24 GMT Message-ID: <1992Dec9.011024.1320@citec.oz.au> Summary: fixes a leak that occurs on multiple invocations of kvm_getprocs Keywords: fixit, waah baby Lines: 62 Find enclosed a patch that fixes a memory leak that occurs whenever kvm_getprocs is called multiple times. This is not usually a problem, as programs such as ps only call it once, but during my porting of top, it became quite a problem (5Mb+ process very quickly) It does assume that you've applied the 2 patches that came in Terry's patch kit. Cheers, Stephen *** kvm.c.old Wed Dec 9 10:39:00 1992 --- kvm.c Wed Dec 9 10:45:05 1992 *************** *** 396,401 **** --- 396,403 ---- kvm_getprocs(what, arg) int what, arg; { + static int ocopysize = -1; + if (kvminit == 0 && kvm_init(NULL, NULL, NULL, 0) == -1) return (NULL); if (!deadkernel) { *************** *** 406,415 **** return (-1); } copysize = ret; ! if ((kvmprocbase = (struct kinfo_proc *)malloc(copysize)) ! == NULL) { ! seterr("out of memory"); ! return (-1); } if ((ret = getkerninfo(what, kvmprocbase, ©size, arg)) == -1) { --- 408,421 ---- return (-1); } copysize = ret; ! if (copysize > ocopysize) ! { ! ocopysize = copysize; ! if ((kvmprocbase = (struct kinfo_proc *)realloc(kvmprocbase, copysize)) ! == NULL) { ! seterr("out of memory"); ! return (-1); ! } } if ((ret = getkerninfo(what, kvmprocbase, ©size, arg)) == -1) { -- ----------------------------------------------------------------------------- "Toddlers are the stormtroopers of the Lord of Entropy" Stephen Hocking sgccseh@citecuc.citec.oz.au -- ----------------------------------------------------------------------------- "Toddlers are the stormtroopers of the Lord of Entropy" Stephen Hocking sgccseh@citecuc.citec.oz.au