Subject: calloc() and free() ps doesn'r report memory being freed, why?
To: 'netbsd-help' <netbsd-help@NetBSD.ORG>
From: John Maier <JohnAM@datastorm.com>
List: netbsd-users
Date: 04/23/1997 21:09:08
I have been hacking on ftpd so I can add an alternate ftp password   
filelist.  This allows me to give explicit access to individule without   
compromising system security.  Also I can allow others to administer the   
auxiliary ftp passwords with out having to give them su privlages.

I added a feature to allow the sub-administrator the ability to limit   
logins to a particular number of logins (3 in my case).  To do this I   
added a function that is called after a correct password has been   
entered.  I noticed, however, that the ftpd proccess memory usage went   
through the cealing!  On a 64Meg machine, which I have never seen in   
swap, I now get up to 14Megs into swap.

I am using free() like a good boy, by ps -maux shows VSZ=2264 and   
RSS=2052.  On a anonymous FTP login (which by-passes this function) The   
memory usage, as reported by ps, is VSZ=196 and RSS=520.

So what am I doing wrong?  Do I need to worry about this?  Is there   
something I can do to get the OS to compact the memory for a proccess?

Thanks
jam


/* code fragment */
int ReduceLogin(char *szUser)
{
 unsigned int iCnt=0;
 int iState=0;
 passwdfile *password[NUMBER_OF_ENTRIES];

 *password = calloc(NUMBER_OF_ENTRIES, sizeof(passwdfile));
 
 /* manipulate data */
 ~
 ~
 ~
 ~
 /* end data manipulation */

 free(*password); /* added out of desparation */
 free(password);  /* free the gobs (1.5 Meg) of memory allocated */
 return iState;
}