I don't think we use afs file system.  slabtop does not have 
afs_inode_cache as one of its entries.


Regarding things that don't really make sense in sample code:
- In the real application, we're getting the file size by doing
        fseek(ptr, 0, SEEK_END);
        fileSize = ftell(ptr);                  // This line was omitted 
in the sample code
        fseek(ptr, 0, SEEK_SET);
- The "&&amp" was something that my internet browser did, it's supposed to 
be just "&&"
- print("Success\n") instead of printf("Success") was a cut-n-paste error.

Khoa.




From:
Stephan Wiesand <[email protected]>
To:
[email protected]
Cc:
Khoa To <[email protected]>
Date:
06/21/2010 10:56 AM
Subject:
Re: Mem leak with fopen/fseek/fclose ?




On Jun 21, 2010, at 3:12, Khoa To wrote:

> I observed a memory leak (about 20 bytes per iteration) when I ran this 
> 
> simple program on my Scientific Linux 5.4 box (kernel version 2.6.18-
> 128.1.1.e15).

Pretty old kernel (the one from the 5.3 initial release). What's the AFS 
client version? (output of "rxdebug localhost 7001 -v")

> What I did was noting the output of "free -m" before and after I ran the 

> 
> program (which loops for 300000). I observed a 6MB increase in memory 
use
> d. 
> No error was printed during the run.
> 
> If I comment out the 2 fseek statements, then I don't see any memory 
> increase.

Check the amount of memory used for afs_inode_cache before and after the 
run (using slabtop). Does the difference account for the "leak"?
> 
> The file size is about 700KB.
> 
> I was wondering if someone can tell me if this is a known issue or if 
I'm
> 
> doing something wrong.

Well, the code below is not what you're actually running since amp is 
undefined. And the whole test for the while() loop doesn't make too much 
sense to me (although the first statement could probably simply be 
omitted).

Regards,
                 Stephan

> 
> Thanks,
> Khoa.
> 
> ======Source file, compiled with gcc=========
> 
> #include <stdio.h>
> #include <errno.h>
> 
> int main()
> {
>   FILE * ptr = NULL;
>   int count = 0;
> 
>   ptr = fopen("myBinaryFile","r");
>   while (ptr != NULL &&amp; count++ < 300000)
>   {
>        usleep(1000);
> 
>        if (fseek(ptr, 0, SEEK_END))
>                printf("Error 1: %d\n", errno);
>        if (fseek(ptr, 0, SEEK_SET))
>                printf("Error 2: %d\n", errno);
> 
>        if (fclose(ptr))
>                break;
> 
>        usleep(10000);
> 
>        ptr = fopen("myBinaryFile","r");
>   }
> 
>    fclose(ptr);
> 
>    if (count >= 300000)
>       print("Success\n");
> 
>    return 0;
> }

-- 
Stephan Wiesand
DESY -DV-
Platanenallee 6
15738 Zeuthen, Germany






Reply via email to